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

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == キーボード入力 == フォーカスを持つオブジェクトに破棄されたイベントは、<code>keyPressEvent</code>メソッド…」)
 
22行目: 22行目:
  void MainWindow::keyPressEvent(QKeyEvent *pEvent)
  void MainWindow::keyPressEvent(QKeyEvent *pEvent)
  {
  {
     switch (event->key())
     switch (pEvent->key())
     {
     {
       case Qt::Key_Escape:
       case Qt::Key_Escape:
52行目: 52行目:
           break;
           break;
       default:
       default:
           qDebug("keyPress %x", event->key());
           qDebug("keyPress %x", pEvent->key());
           break;
           break;
     }
     }
}
</syntaxhighlight>
<br><br>
== 複数のキーの取得 ==
1つのキーボードイベントで、複数のキーを取得する。<br>
<syntaxhighlight lang="c++">
QSet<Qt::Key> keysPressed;
void Widget::keyPressEvent(QKeyEvent *pEvent)
{
    m_bFirstRelease = true;
    keysPressed += pEvent->key();
}
void Widget::keyReleaseEvent(QKeyEvent *pEvent)
{
    if(m_bFirstRelease)
    {
      processMultiKeys(keysPressed);
    }
    m_bFirstRelease = false;
    keysPressed -= pEvent->key();
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

2021年3月29日 (月) 14:34時点における版

概要



キーボード入力

フォーカスを持つオブジェクトに破棄されたイベントは、keyPressEventメソッドで受け取れない。
イベント一括処理で破棄されたイベントは受け取れない。

 // Mainwindow.h
 
 // ...略
 
 protected:
    void keyPressEvent(QKeyEvent *pEvent);


 // Mainwindow.cpp
 
 // 押下したキー名をデバッグ出力する
 // その他のキーは、16進数を出力する
 void MainWindow::keyPressEvent(QKeyEvent *pEvent)
 {
    switch (pEvent->key())
    {
       case Qt::Key_Escape:
          qDebug() << "Esc keyPress";
          break;
       case Qt::Key_Return:
          qDebug() << "Return keyPress";
          break;
       case Qt::Key_Enter:
          qDebug() << "Enter(keypad) keyPress";
          break;
       case Qt::Key_Home:
          qDebug() << "Home keyPress";
          break;
       case Qt::Key_Left:
          qDebug() << "Left keyPress";
          break;
       case Qt::Key_Down:
          qDebug() << "Down keyPress";
          break;
       case Qt::Key_Space:
          qDebug() << "Space keyPress";
          break;
       case Qt::Key_F1:
          qDebug() << "F1 keyPress";
          break;
       case Qt::Key_0:
          qDebug() << "0(keypad) keyPress";
          break;
       default:
          qDebug("keyPress %x", pEvent->key());
          break;
    }
 }



複数のキーの取得

1つのキーボードイベントで、複数のキーを取得する。

 QSet<Qt::Key> keysPressed;
 
 void Widget::keyPressEvent(QKeyEvent *pEvent)
 {
    m_bFirstRelease = true;
    keysPressed += pEvent->key();
 }
 
 void Widget::keyReleaseEvent(QKeyEvent *pEvent)
 {
    if(m_bFirstRelease)
    {
       processMultiKeys(keysPressed);
    }
 
    m_bFirstRelease = false;
 
    keysPressed -= pEvent->key();
 }