5

QShortcut可以轻松地将 QShortcutEvent(按键、组合或序列)连接到插槽方法,例如:

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

(提示:对于数字键,可以使用 QSignalMapper 将 QShortcut 的activated()信号映射到带有int参数的 Slot)。

但是,在本例中,使用 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

3

您可以使用Qt.KeypadModifier,例如 [Python]:

def keyPressEvent(self, event):
    numpad_mod = int(event.modifiers()) & QtCore.Qt.KeypadModifier
    if event.key() == QtCore.Qt.Key5 and numpad_mod:
        #Numpad 5 clicked
于 2017-10-16T08:08:43.483 回答
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 回答