首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QKeySequence到QKeyEvent

QKeySequence到QKeyEvent
EN

Stack Overflow用户
提问于 2012-04-30 12:05:50
回答 3查看 5.6K关注 0票数 12

在这种情况下,我试图读取一个JSON配置文件,该文件指示哪些键命令映射到给定的操作。例如:

代码语言:javascript
复制
...
{ 
    "Action": "Quit",
    "Combo" : "CTRL+Q"
},
...

从组合体标记构建QKeySequence很简单,但我需要监视QKeyEvent,以触发操作。请注意,我必须监视QKeyEvent,因为它们也用于应用程序中的其他目的。也就是说,只监视QKeySequence的键命令是不可接受的(如果可能的话)。

除了编写一个自定义解析器来为每个QKeyEvent标记构造一个"Combo"对象之外,还有将QkeyEventQKeySequence进行比较的方法吗?例如:

代码语言:javascript
复制
QKeyEvent KeyCommandsHandler::toKeyEvent(QKeySequence sequence) {
   //somehow convert to QKeyEvent
}
EN

回答 3

Stack Overflow用户

发布于 2012-04-30 15:34:00

通常,您不能比较QKeyEventQKeySequence对象。QKeyEvent表示单个键按下或发布的事件,而QKeySequence可以包含最多四个键的序列,每个键都带有可选的修饰符信息。

但是,如果您确信您的键序列总是包含一个键,则可以比较这些对象:

代码语言:javascript
复制
bool isEquiv(const QKeyEvent& event, const QKeySequence& seq)
{
    if (seq.count() != 1)
        return false;
    return seq[0] == (event.key() | event.modifiers());
}

您甚至可以为QKeyEvent编写到QKeySequence的转换函数。

代码语言:javascript
复制
QKeySequence toKeySequence(const QKeyEvent& event)
{
    return QKeySequence(event.key() | event.modifiers());
}

但请注意,将QKeySequence转换为QKeyEvent是没有意义的,因为您必须选择特定的事件类型,如QEvent::KeyPressQEvent::KeyRelease

票数 7
EN

Stack Overflow用户

发布于 2013-12-18 11:09:49

一个简单的解决方案(用python编写):

代码语言:javascript
复制
key = QKeySequence(event.modifiers()|event.key()).toString()

将以字符串形式给出整个序列,如"Ctrl+Q“。

好处是(至少在python中),您可以在一条快捷方式中找到它,而QKeySequence则是不可接受的。

请注意,这要求您使用正确的类型和间距。"ctrl +Q“不匹配。为了避免所有问题,您可以在第一次阅读快捷键时执行以下操作:

代码语言:javascript
复制
shortcut = shortcut.lower().remove(' ')

和匹配/查找使用

代码语言:javascript
复制
key = QKeySequence(event.modifiers()|event.key()).toString().lower()

或者更好的是:

代码语言:javascript
复制
shortcut = QKeySequence(shortcut).toString()

直接匹配。

票数 6
EN

Stack Overflow用户

发布于 2013-09-12 14:51:21

Qt4.7注释,其中包含将KeyEvent转换为KeySequence的代码。 (但是代码有缺陷,因为它将密钥代码从QKeyEvent.key()转换为字符串。最好使用QKeyEvent.text() ?)

此外,Ferdinand回答中的代码:

代码语言:javascript
复制
QKeySequence(event.key() | event.modifiers())

类型是否安全(混合int和QKeyboardModifiers),如果转换为Python在PyQt中失败,但在PySide中失败?

此外,"QKeyEvent表示单个按键或发布的事件“并不能真正解释这一点。QKeyEvent可以告诉你键的组合是什么,而不是按下它们的顺序。当用户按按顺序键时,您的应用程序可能会得到一个QKeyEvents序列(取决于您的应用程序是否对QKeyEvent使用默认的和重写的处理程序)。后面的QKeyEvents将显示事件发生时所有的键。他们可能不再倒下了。这相当复杂。

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

https://stackoverflow.com/questions/10383418

复制
相关文章

相似问题

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