キーイベントの受け取り

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のインスタンスを得ています。

以上、キーイベントの受け取り方でした。では、また!

関連項目
プライバシーポリシー