覚え書きブログ

Qtの覚え書き(PushButtonとComboBox編)

パソコンに接続されているジョイスティックの一覧をComboBoxウィジェットを用いて表示し、PushButtonを用いてジョイスティックの値を取得するスレッドを開始および停止するようにしてみた。
f:id:hirotaka_hachiya:20160421183352p:plain

ComboBox1つとPushButton2つを以下のように、追加した。
f:id:hirotaka_hachiya:20160421182515p:plain
f:id:hirotaka_hachiya:20160421182520p:plain

ComboBoxのドロップダウンリストに、アイテムを追加するためには、以下のようにaddItemというメソッドを使う。下記の例では、joyGetNumDevsメソッドで、パソコンに接続できるジョイスティックの数(大抵は16個)を取得し、各ジョイスティックのIDごとに、joyGetDevCapsメソッドで、JOYCAPS構造体を取得できるかどうかを確認している。つまり、JOYCAPS構造体を取得できる場合は、ジョイステックが接続されているので、当該ジョイスティックIDの情報「"Joypad"+QString::number(i)」を、addItemでリストに追加している。

    JOYCAPS joyCaps;

    for(unsigned int i=0;i<joyGetNumDevs();i++){
        if(JOYERR_NOERROR == joyGetDevCaps(i, &joyCaps,sizeof(joyCaps))){
            ui->joyComboBox->addItem("Joypad"+QString::number(i));
            qDebug("Joypad%d",i);
        }
    }

次に、PushButtonの押下時の処理を追加してみる。下図のように、デザイン画面にて、PushButtonを右クリックして、「スロットへ移動...」を選択する。
f:id:hirotaka_hachiya:20160421183609p:plain
そして、押下シグナル「clicked()」を受け取るスロットを追加する。
f:id:hirotaka_hachiya:20160421183745p:plain

以下がPushButton「joyStartPushButton」と「joyStopPushButton」のclicked()シグナルを受け取りジョイスティックのスレッドを開始し、停止する例である。

void Dialog::on_joyStartPushButton_clicked()
{
    // stop joystick thread
    if(myJoyThread.isRunning())
        myJoyThread.stop();

    // start joystick thread with joystick id
    myJoyThread.startJoyThread(ui->joyComboBox->currentIndex());

    qDebug("%d",ui->joyComboBox->currentIndex());
}


void Dialog::on_joyStopPushButton_clicked()
{
    // stop joystick thread
    myJoyThread.stop();
}