多个快捷键不起作用

时间:2017-09-12 05:48:44

标签: c++ qt shortcut qaction

我在每个QAction上添加了多个快捷方式,例如'L,对,空间'。 但'L'快捷方式现在不起作用。 “正确”和“空间”可以发挥作用。

同样,如果我注册'A,B'然后,'A'将无效,'B'将起作用。

如果我自己使用QMainWindow::eventFilter(),而不是使用QAction::setShortcut(),则所有快捷键都可以使用。

在这种情况下,当然,快捷键文本不会显示在主菜单上。

我测试了Windows 7 x64和Qt-5.9.1

QMap<QString, QAction*>& actions = qApp->keyActions().actions();
QMap<QString, QKeySequence> & seqMap = qApp->keyActions().keyMaps();
foreach(const QString& name, actions.keys()) {
    QAction* a = actions[name];
    QKeySequence seq = seqMap[name]; // e.g. QKeySequence("L, Right, Space")
    a->setShortcut(seq);
    a->setShortcutContext(Qt::ApplicationShortcut);
}

1 个答案:

答案 0 :(得分:0)

正如名称&#34; QKeySequence&#34;建议,这是一系列必须按下的键。字符串"L, Right, Space"表示用户必须按顺序按下所有3个键才能调用操作!

如果你想要多个&#34; parallel&#34;键,即动作应对任何键而不是序列作出反应,使用QAction::setShortcuts并为每个键创建一个序列。 (您可以使用QStringList::split将字符串拆分为3个键。)