« 「ブリュンヒルデ零式改」をVS2013 for Desktopで作ってみます その2 | トップページ | 「ブリュンヒルデ零式改」をVS2013 Expressで作ってみます その3 »

2014年10月 7日 (火)

すべてのイベントを取得するには

最後の問題として挙げていた件ですが…

通常のアプリケーションとしては、特殊なキー(例えば「全角/半角キー」とか「Windowsキー」)はあまり扱う必要はないのですが、リモートでPCを操作しようとする今回の場合すべてのキーを扱う必要があります。

先人たちの知恵を頼りに早速googleさんで検索してみました。

Qt eventFilterでイベントを振り分ける

どうやら仮想関数eventFilter()を実装してQApplicationのインスタンスにイベントフィルタとして登録(install)すればいいみたいですね。

virtual bool eventFilter(QObject *obj, QEvent *event);

イベントフィルターということなので、すべてのイベント(キー、マウスなど)が起こる度にこの関数が呼ばれるみたいです。ということは、今までデバイスの種類(キーボード/マウス)とイベントの種類(キーが押された/離された、マウスのボタンが押された、など)で別々な関数を書いていたのを1つにまとめる必要がありそうです。

これで取り敢えず見えている問題は解決できそうです。

あとはドキュメント作りもあるか…USキーボードも…インストーラ環境の確認(EXEpress6)も…

(追記)
QApplicationのインスタンスにイベントフィルタを登録しても、「全角/半角」、「ひらがな/カタカナ」、「変換」、「左右のWindows」の各キーイベントは取得できないようです…無変換キーだけは取得できますが…

これ以上だとQApplicationのサブクラスを作って、notify()関数をオーバライドする手段しかなさそうです。

« 「ブリュンヒルデ零式改」をVS2013 for Desktopで作ってみます その2 | トップページ | 「ブリュンヒルデ零式改」をVS2013 Expressで作ってみます その3 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: すべてのイベントを取得するには:

« 「ブリュンヒルデ零式改」をVS2013 for Desktopで作ってみます その2 | トップページ | 「ブリュンヒルデ零式改」をVS2013 Expressで作ってみます その3 »