「Qtのコントロール - キーボード」の版間の差分

ナビゲーションに移動 検索に移動
40行目: 40行目:


== 単一キーの取得 ==
== 単一キーの取得 ==
フォーカスを持つオブジェクトに破棄されたイベントは、<code>keyPressEvent</code>メソッドで受け取れない。<br>
単一キーが押下された場合を取得するには、<code>keyPressEvent</code>メソッドを使用する。<br>
<br>
ただし、フォーカスを持つオブジェクトに破棄されたイベントは、<code>keyPressEvent</code>メソッドで受け取れない。<br>
イベント一括処理で破棄されたイベントは受け取れない。<br>
イベント一括処理で破棄されたイベントは受け取れない。<br>
<br>
<u>※注意</u><br>
* 基底クラスの呼び出し
*: 未処理のキーイベントを適切に処理するため、デフォルトケースで基底クラスの<code>keyPressEvent</code>を呼び出すことが推奨される。
* キーの繰り返し
*: 長押しによるキーの繰り返しを区別する場合は、QKeyEventクラスのisAutoRepeatメソッドを使用する。
* イベントの受理
*: 特定のキーイベントを完全に処理したことを示すため、QKeyEventクラスのacceptメソッドを呼び出す。
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  // Mainwindow.h
  // Mainwindow.h
58行目: 69行目:
  void MainWindow::keyPressEvent(QKeyEvent *pEvent)
  void MainWindow::keyPressEvent(QKeyEvent *pEvent)
  {
  {
     switch (pEvent->key())
     switch (pEvent->key()) {
    {
       case Qt::Key_Escape:
       case Qt::Key_Escape:
           qDebug() << "Esc keyPress";
           qDebug() << "Esc keyPress";
          pEvent->accept();
           break;
           break;
       case Qt::Key_Return:
       case Qt::Key_Return:
68行目: 79行目:
       case Qt::Key_Enter:
       case Qt::Key_Enter:
           qDebug() << "Enter(keypad) keyPress";
           qDebug() << "Enter(keypad) keyPress";
          pEvent->accept();
           break;
           break;
       case Qt::Key_Home:
       case Qt::Key_Home:
           qDebug() << "Home keyPress";
           qDebug() << "Home keyPress";
          pEvent->accept();
           break;
           break;
       case Qt::Key_Left:
       case Qt::Key_Left:
           qDebug() << "Left keyPress";
           qDebug() << "Left keyPress";
          pEvent->accept();
           break;
           break;
       case Qt::Key_Down:
       case Qt::Key_Down:
           qDebug() << "Down keyPress";
           qDebug() << "Down keyPress";
          pEvent->accept();
           break;
           break;
       case Qt::Key_Space:
       case Qt::Key_Space:
           qDebug() << "Space keyPress";
           qDebug() << "Space keyPress";
          pEvent->accept();
           break;
           break;
       case Qt::Key_F1:
       case Qt::Key_F1:
           qDebug() << "F1 keyPress";
           qDebug() << "F1 keyPress";
          pEvent->accept();
           break;
           break;
       case Qt::Key_0:
       case Qt::Key_0:
           qDebug() << "0(keypad) keyPress";
           qDebug() << "0(keypad) keyPress";
          pEvent->accept();
           break;
           break;
       default:
       default:
           qDebug("keyPress %x", pEvent->key());
           qDebug("keyPress %x", pEvent->key());
          QMainWindow::keyPressEvent(pEvent);  // 基底クラスの呼び出し
           break;
           break;
    }
    // 自動繰り返しを区別する場合
    if (pEvent->isAutoRepeat()) {
      qDebug() << "Key is auto-repeating";
     }
     }
  }
  }

案内メニュー