5

QShortcutを使用すると、QShortcutEvent (キーの押下、組み合わせ、またはシーケンス) をスロット メソッドに簡単に接続できます。次に例を示します。

QShortcut *shortcut = new QShortcut( QKeySequence(Qt::Key_7), this, 0, 0, Qt::ApplicationShortcut);

(ヒント: 数字キーの場合、QSignalMapper を使用して QShortcut のactivated()シグナルをintパラメーター付きのスロットにマップできます)。

ただし、この例では、NumLock (テンキーが有効) で、両方の '7' キーがショートカットのactivated()信号をトリガーします。

ウィジェットのkeyPressEventをフィルタリングまたは再実装し、 QKeyEvent::modifiers()Qt::KeypadModifierをチェックする以外に、さまざまなキーを検出する方法はありますか?

さらに掘り下げて、見つけた

QTBUG-20191 Qt::KeypadModifier は、2012 年 9 月に 4.8 にマージされたパッチにリンクしているsetShortcutでは機能しません。

button2->setShortcut(Qt::Key_5 + Qt::KeypadModifier);

これは、Qt 4.8.1 の QShortcut では機能しません。つまり、モディファイア フラグを使用 (追加) すると、'7' キーのどちらも認識されません。

したがって、修飾子を検出するフィルターをインストールし、他のすべての keyEvents をデフォルトの実装で処理して QShortcut で使用できるようにするのが最も簡単な方法だと思います。

4

2 に答える 2

2

これには、 keyReleaseEvent (QKeyEvent *event)を使用できます。たとえば

void Form::keyReleaseEvent(QKeyEvent *event)    {
    int key = event->nativeScanCode();

    if( key == 79 ) //value for numpad 7
    {
       //your statement   
    }


}
于 2014-04-03T03:54:57.513 に答える