13,056
回編集
| 106行目: | 106行目: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<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> | ||