在这种情况下,我试图读取一个JSON配置文件,该文件指示哪些键命令映射到给定的操作。例如:
...
{
"Action": "Quit",
"Combo" : "CTRL+Q"
},
...从组合体标记构建QKeySequence很简单,但我需要监视QKeyEvent,以触发操作。请注意,我必须监视QKeyEvent,因为它们也用于应用程序中的其他目的。也就是说,只监视QKeySequence的键命令是不可接受的(如果可能的话)。
除了编写一个自定义解析器来为每个QKeyEvent标记构造一个"Combo"对象之外,还有将QkeyEvent与QKeySequence进行比较的方法吗?例如:
QKeyEvent KeyCommandsHandler::toKeyEvent(QKeySequence sequence) {
//somehow convert to QKeyEvent
}发布于 2012-04-30 15:34:00
通常,您不能比较QKeyEvent和QKeySequence对象。QKeyEvent表示单个键按下或发布的事件,而QKeySequence可以包含最多四个键的序列,每个键都带有可选的修饰符信息。
但是,如果您确信您的键序列总是包含一个键,则可以比较这些对象:
bool isEquiv(const QKeyEvent& event, const QKeySequence& seq)
{
if (seq.count() != 1)
return false;
return seq[0] == (event.key() | event.modifiers());
}您甚至可以为QKeyEvent编写到QKeySequence的转换函数。
QKeySequence toKeySequence(const QKeyEvent& event)
{
return QKeySequence(event.key() | event.modifiers());
}但请注意,将QKeySequence转换为QKeyEvent是没有意义的,因为您必须选择特定的事件类型,如QEvent::KeyPress或QEvent::KeyRelease。
发布于 2013-12-18 11:09:49
一个简单的解决方案(用python编写):
key = QKeySequence(event.modifiers()|event.key()).toString()将以字符串形式给出整个序列,如"Ctrl+Q“。
好处是(至少在python中),您可以在一条快捷方式中找到它,而QKeySequence则是不可接受的。
请注意,这要求您使用正确的类型和间距。"ctrl +Q“不匹配。为了避免所有问题,您可以在第一次阅读快捷键时执行以下操作:
shortcut = shortcut.lower().remove(' ')和匹配/查找使用
key = QKeySequence(event.modifiers()|event.key()).toString().lower()或者更好的是:
shortcut = QKeySequence(shortcut).toString()直接匹配。
发布于 2013-09-12 14:51:21
Qt4.7注释,其中包含将KeyEvent转换为KeySequence的代码。 (但是代码有缺陷,因为它将密钥代码从QKeyEvent.key()转换为字符串。最好使用QKeyEvent.text() ?)
此外,Ferdinand回答中的代码:
QKeySequence(event.key() | event.modifiers())类型是否安全(混合int和QKeyboardModifiers),如果转换为Python在PyQt中失败,但在PySide中失败?
此外,"QKeyEvent表示单个按键或发布的事件“并不能真正解释这一点。QKeyEvent可以告诉你键的组合是什么,而不是按下它们的顺序。当用户按按顺序键时,您的应用程序可能会得到一个QKeyEvents序列(取决于您的应用程序是否对QKeyEvent使用默认的和重写的处理程序)。后面的QKeyEvents将显示事件发生时所有的键。他们可能不再倒下了。这相当复杂。
https://stackoverflow.com/questions/10383418
复制相似问题