13,160
回編集
(→方法 3) |
|||
| 188行目: | 188行目: | ||
// コンストラクタでイベントフィルタをインストールする | // コンストラクタでイベントフィルタをインストールする | ||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) | MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) | ||
{ | { | ||
ui->setupUi(this); | |||
installEventFilter(this); | installEventFilter(this); | ||
} | } | ||
| 281行目: | 282行目: | ||
default: | default: | ||
qDebug("release %x", event->key()); | qDebug("release %x", event->key()); | ||
return false; | |||
} | |||
return true; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== 方法 4 ==== | |||
一括処理でKeyPressイベントを取得する場合は、<code>QEvent::ShortcutOverride</code>を使用して、標準ショートカットを上書きする。<br> | |||
ただし、同じキーが2つセット(PressとRelease)で来るので注意が必要である。<br> | |||
<syntaxhighlight lang="c++"> | |||
// MainWindow.h | |||
class MainWindow : public QMainWindow | |||
{ | |||
Q_OBJECT | |||
// ...略 | |||
// イベントフィルタとメソッドを宣言する | |||
protected: | |||
bool eventFilter(QObject *obj, QEvent *pEvent); | |||
private: | |||
bool MyKeyPress(QKeyEvent *pEvent); | |||
// ...略 | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// MainWindow.cpp | |||
// コンストラクタでイベントフィルタをインストールする | |||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) | |||
{ | |||
ui->setupUi(this); | |||
installEventFilter(this); | |||
} | |||
// ShortcutOverrideで標準ショートカットを上書きしてKeyPressを取得する | |||
bool MainWindow::eventFilter(QObject *obj, QEvent *pEvent) | |||
{ | |||
bool bRtn = false; | |||
if(pEvent->type() == QEvent::ShortcutOverride) | |||
{ | |||
bRtn = MyKeyPress(static_cast<QKeyEvent *>(pEvent)); | |||
} | |||
return bRtn; | |||
} | |||
// キー押下時の処理 | |||
// スイッチを使用して1つ破棄する | |||
bool MainWindow::MyKeyPress(QKeyEvent *pEvent) | |||
{ | |||
static int sw = -1; | |||
if(pEvent->isAutoRepeat()) | |||
{ | |||
return true; | |||
} | |||
if(pEvent->key() == sw) | |||
{ | |||
sw = -1; | |||
return true; | |||
} | |||
sw = pEvent->key(); | |||
switch(pEvent->key()) | |||
{ | |||
case Qt::Key_Escape: | |||
qDebug() << "Esc ScutOver"; | |||
break; | |||
case Qt::Key_Return: | |||
qDebug() << "Return ScutOver"; | |||
break; | |||
case Qt::Key_Enter: | |||
qDebug() << "Enter(keypad) ScutOver"; | |||
break; | |||
case Qt::Key_Home: | |||
qDebug() << "Home ScutOver"; | |||
break; | |||
case Qt::Key_Left: | |||
qDebug() << "Left ScutOver"; | |||
break; | |||
case Qt::Key_Down: | |||
qDebug() << "Down ScutOver"; | |||
break; | |||
case Qt::Key_Space: | |||
qDebug() << "Space ScutOver"; | |||
break; | |||
case Qt::Key_F1: | |||
qDebug() << "F1 ScutOver"; | |||
break; | |||
case Qt::Key_0: | |||
qDebug() << "0(keypad) ScutOver"; | |||
break; | |||
default: | |||
qDebug("ScutOver %x", pEvent->key()); | |||
return false; | return false; | ||
} | } | ||