QShortcut可以轻松地将QShortcutEvent (按键、组合或序列)连接到插槽方法,例如:
QShortcut *shortcut = new QShortcut( QKeySequence(Qt::Key_7), this, 0, 0, Qt::ApplicationShortcut);(提示:对于数字键,可以使用QSignalMapper将QShortcut的activated()信号映射到带有int参数的槽中)。
然而,在本例中,在NumLock (启用numpad)的情况下,两个'7‘键都将触发快捷键的activated()信号。
除了过滤或重新实现小部件的keyPressEvent并检查Qt::KeypadModifier的QKeyEvent::modifiers()之外,有没有其他方法可以检测不同的键
进一步挖掘,我发现
QTBUG-20191 Qt::KeypadModifier does not work with setShortcut链接到patch that has been merged into 4.8 in Sept. 2012,并附带使用以下命令的test case
button2->setShortcut(Qt::Key_5 + Qt::KeypadModifier);这不适用于我在Qt 4.8.1上的QShortcut,也就是说,使用(添加)修饰符标志都不能识别'7‘键。
所以我猜最快的方法是安装一个过滤器来检测修饰符,并让所有其他keyEvents由默认实现处理,以便与QShortcut一起使用?
发布于 2017-10-16 16:08:43
您可以使用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发布于 2014-04-03 11:54:58
为此,您可以使用keyReleaseEvent(QKeyEvent *event),例如
void Form::keyReleaseEvent(QKeyEvent *event) {
int key = event->nativeScanCode();
if( key == 79 ) //value for numpad 7
{
//your statement
}
}https://stackoverflow.com/questions/17718743
复制相似问题