gpt4 book ai didi

c++ - QKeySequence 到 QKeyEvent

转载 作者:可可西里 更新时间:2023-11-01 17:39:27 32 4
gpt4 key购买 nike

我正处于一种情况,我正在尝试读取一个 JSON 配置文件,该文件规定了哪些关键命令映射到给定的操作。例如:

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

从组合标记构造一个 QKeySequence 很简单,但我需要监视 QKeyEvent 以触发操作。请注意,我监视QKeyEvent,因为它们在应用程序中也用于其他目的。也就是说,仅监视 QKeySequence 的键命令是 Not Acceptable (如果可能的话)。

如果没有编写自定义解析器来为每个 "Combo" 标记构造一个 QKeyEvent 对象,是否可以将 QkeyEvent 与一个 QKeySequence?例如:

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++ - QKeySequence 到 QKeyEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383418/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com