我处于一种情况下,我试图读取一个JSON配置文件,该文件指示哪些关键命令映射到给定的 Action 。例如:
...
{
"Action": "Quit",
"Combo" : "CTRL+Q"
},
...
从combo标签构造
QKeySequence
很简单,但是我需要监视QKeyEvent
才能触发 Action 。请注意,我必须监视QKeyEvent
,因为它们也用于应用程序中的其他目的。即仅监视QKeySequence
的键盘命令是 Not Acceptable (如果可能的话)。无需编写自定义解析器为每个
QKeyEvent
标签构造"Combo"
对象,是否有将QkeyEvent
与QKeySequence
比较的方法?例如:QKeyEvent KeyCommandsHandler::toKeyEvent(QKeySequence sequence) {
//somehow convert to QKeyEvent
}
最佳答案
通常,您无法比较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
。关于c++ - QKeyEvent的QKeySequence,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10383418/