パソコンに接続されているジョイスティックの一覧をComboBoxウィジェットを用いて表示し、PushButtonを用いてジョイスティックの値を取得するスレッドを開始および停止するようにしてみた。
ComboBox1つとPushButton2つを以下のように、追加した。
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を右クリックして、「スロットへ移動...」を選択する。
そして、押下シグナル「clicked()」を受け取るスロットを追加する。
以下が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(); }