13,160
回編集
(→概要) |
|||
| 40行目: | 40行目: | ||
== 単一キーの取得 == | == 単一キーの取得 == | ||
単一キーが押下された場合を取得するには、<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"; | |||
} | } | ||
} | } | ||