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

ナビゲーションに移動 検索に移動
106行目: 106行目:
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br>
 
==== 方法 2 ====
==== 方法 2 ====
押下したキーをQSetクラスに追加して、キーを離す時にQSetクラスから削除する。<br>
イベントフィルタを使用して、主要なイベントを捕捉する。<br>
<syntaxhighlight lang="c++">
// MainWindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
// ...略
private:
    Ui::MainWindow *ui;
    bool m_bFirstRelease;
    QSet<int> m_keysPressed;
protected:
    bool eventFilter(QObject *obj, QEvent *pEvent);
    keyPressEvent(QKeyEvent *pEvent)
    keyReleaseEvent(QKeyEvent *pEvent)
// ...略
};
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// コンストラクタでイベントフィルタをインストールする
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    installEventFilter(this);
}
bool MainWindow::eventFilter(QObject *obj, QEvent *pEvent)
{
    if(pEvent->type() == QEvent::KeyPress)
    {
      m_keysPressed += ((QKeyEvent*)pEvent)->key();
      if(m_keysPressed.contains(Qt::Key_D) && m_keysPressed.contains(Qt::Key_W))
      {  // [D]キーと[W]キーを同時に押下する場合
          // ...処理を記述
      }
    }
    else if(pEvent->type() == QEvent::KeyRelease)
    {
      m_keysPressed -= ((QKeyEvent*)pEvent)->key();
    }
    return false;
}
</syntaxhighlight>
<br>
==== 方法 3 ====
イベントフィルタを使用して、キーボードやマウスのイベントを一括で処理する。<br>
イベントフィルタを使用して、キーボードやマウスのイベントを一括で処理する。<br>
ただし、全てのイベントを処理できるか不明である。<br>
ただし、全てのイベントを処理できるか不明である。<br>

案内メニュー