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

...
{
    "Action": "Quit",
    "Combo" : "CTRL+Q"
},
...

从combo标签构造QKeySequence很简单,但是我需要监视QKeyEvent才能触发 Action 。请注意,我必须监视QKeyEvent,因为它们也用于应用程序中的其他目的。即仅监视QKeySequence的键盘命令是 Not Acceptable (如果可能的话)。

无需编写自定义解析器为每个QKeyEvent标签构造"Combo"对象,是否有将QkeyEventQKeySequence比较的方法?例如:
QKeyEvent KeyCommandsHandler::toKeyEvent(QKeySequence sequence) {
   //somehow convert to QKeyEvent
}

最佳答案

通常,您无法比较QKeyEventQKeySequence对象。 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::KeyPressQEvent::KeyRelease

关于c++ - QKeyEvent的QKeySequence,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10383418/

10-13 03:09