0

我在每个上都设置了多个快捷方式QAction,例如“L、Right、Space”。但“L”快捷方式现在不起作用。'Right' 和 'Space' 可以工作。

同样,如果我注册“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);
}
4

1 回答 1

0

正如名称“QKeySequence”所暗示的,它是一系列必须按下的键。该字符串"L, Right, Space"意味着用户必须按顺序按下所有 3 个键才能调用该操作!

如果您想要多个“并行”键,即操作应该对这些键中的任何一个做出反应,而不是序列,QAction::setShortcuts请为每个键使用并创建一个序列。(您可以使用QStringList::split将字符串拆分为 3 个键。)

于 2017-09-12T09:00:41.180 回答