キーイベントの受け取り
QKeyEventクラス
キーイベントを受け取るときはeventFilter関数を使います。ただし、キーの情報を受け取る際にはQEventを継承したクラスを使います。
今回はキーイベントなのでウインドウ全体を追加します。
では例を紹介します。まずはヘッダファイルです。
MainWin.h#ifndef MAIN_WIN_H #define MAIN_WIN_H #include <QtGui> class MainWin : public QWidget { public: MainWin(); QLabel* label1; QLabel* label2; protected: bool eventFilter(QObject* widget, QEvent* event); //イベント関数 }; #endif
MainWin_H.hでは部品にイベントを登録するeventFilterはprotected領域に書いてください。
MainWin.cpp#include "MainWin.h" MainWidget::MainWidget() { setWindowTitle("key event"); label1 = new QLabel("press key", this); //キーの状態を表示するラベル label1->setGeometry(5, 0, 100, 15); label2 = new QLabel("key code", this); //キーの文字を表示するラベル label2->setGeometry(5, 15, 50, 15); installEventFilter(this); //キー入力を受け取れるようウインドウをイベントに追加 show(); } bool MainWidget::eventFilter(QObject * obj, QEvent * event) { QKeyEvent * keyEvent; //キーが押されている時のイベントの処理 if(event->type() == QEvent::KeyPress){ keyEvent = static_cast<QKeyEvent * >(event); label1->setText("key pressed"); label2->setText(key_event->text()); return true; } //キーが離されたときのイベントの処理 if(event->type() == QEvent::KeyRelease){ keyEvent = static_cast<QKeyEvent* >(event); label1->setText("key released"); return true; } }
これをコンパイルして実行し、ウインドウ内で適当なキーを押すとラベルに押されたキーが表示されます。
ではソースについて説明します。まずコンストラクタ内のinstallEventFilter関数でウインドウ自身をイベントに追加し、キーイベントを受け取れるようにします。
そしてeventFilter関数内でKeyPressとKeyReleaseというキーを押した時と離したときのイベントを受け取っています。そしてQEventクラス変数のeventを静的にキャストしてQKeyEventのインスタンスを得ています。
以上、キーイベントの受け取り方でした。では、また!
© Kaz