QShortcut可以很容易地一個QShortcutEvent(鍵按壓,組合或序列)連接到一個時隙的方法,例如:C++的Qt QShortcut與數字鍵盤鍵
QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_7), this, 0, 0, Qt::ApplicationShortcut);
(提示:對於數字鍵,一個QSignalMapper可以是用於將QShortcut的activated()
信號映射到具有int
參數的插槽)。
但是,在本例中,如果啓用NumLock(numpad),則'7'鍵將觸發快捷方式的activated()
信號。
有沒有一種方法來檢測除了過濾或重新實現小部件的keyPressEvent和檢查QKeyEvent::modifiers()爲Qt::KeypadModifier以外的其他鍵?
進一步挖掘,我發現
QTBUG-20191 Qt::KeypadModifier does not work with setShortcut鏈接到patch that has been merged into 4.8 in Sept. 2012並附帶使用
button2->setShortcut(Qt::Key_5 + Qt::KeypadModifier);
不爲我的Qt的4.8.1 QShortcut工作test case,即,既不的「 7'鍵被識別使用(添加)修飾符標誌。
所以我想最快的方法是安裝一個過濾器來檢測修飾符,並讓所有其他keyEvents處理默認實現可用於QShortcut?
您的解決方案似乎是最好的。我大部分時間重新實現keyPressEvent()/ keyReleaseEvent(),並在那裏過濾。 –
最快的方法 - 是爲另一個對象安裝一個事件過濾器。事件過濾器可以在目標對象執行之前處理事件,從而允許它根據需要檢查和放棄事件 –