首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带数字键盘键的C++ Qt QShortcut

带数字键盘键的C++ Qt QShortcut
EN

Stack Overflow用户
提问于 2013-07-18 16:47:38
回答 2查看 5.9K关注 0票数 5

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

代码语言:javascript
复制
QShortcut *shortcut = new QShortcut( QKeySequence(Qt::Key_7), this, 0, 0, Qt::ApplicationShortcut);

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

然而,在本例中,在NumLock (启用numpad)的情况下,两个'7‘键都将触发快捷键的activated()信号。

除了过滤或重新实现小部件的keyPressEvent并检查Qt::KeypadModifierQKeyEvent::modifiers()之外,有没有其他方法可以检测不同的键

进一步挖掘,我发现

QTBUG-20191 Qt::KeypadModifier does not work with setShortcut链接到patch that has been merged into 4.8 in Sept. 2012,并附带使用以下命令的test case

代码语言:javascript
复制
button2->setShortcut(Qt::Key_5 + Qt::KeypadModifier);

这不适用于我在Qt 4.8.1上的QShortcut,也就是说,使用(添加)修饰符标志都不能识别'7‘键。

所以我猜最快的方法是安装一个过滤器来检测修饰符,并让所有其他keyEvents由默认实现处理,以便与QShortcut一起使用?

EN

回答 2

Stack Overflow用户

发布于 2017-10-16 16:08:43

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

代码语言:javascript
复制
def keyPressEvent(self, event):
    numpad_mod = int(event.modifiers()) & QtCore.Qt.KeypadModifier
    if event.key() == QtCore.Qt.Key5 and numpad_mod:
        #Numpad 5 clicked
票数 3
EN

Stack Overflow用户

发布于 2014-04-03 11:54:58

为此,您可以使用keyReleaseEvent(QKeyEvent *event),例如

代码语言:javascript
复制
void Form::keyReleaseEvent(QKeyEvent *event)    {
    int key = event->nativeScanCode();

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


}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17718743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档