多个快捷键不起作用

Posted

技术标签:

【中文标题】多个快捷键不起作用【英文标题】:multiple shortcut key doesn't work 【发布时间】:2017-09-12 05:48:43 【问题描述】:

我在每个QAction 上设置了多个快捷方式,例如'左,右,空格'。 但“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);

【问题讨论】:

***.com/a/46072736/5068056 【参考方案1】:

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

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

【讨论】:

以上是关于多个快捷键不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP.INI不起作用

transpportrule不起作用

“添加断点”快捷方式在 xcode 4.3 中不起作用

Anaconda Spyder快捷键Ctrl + Enter和Shift + Enter不起作用

Vba窗体的keydown怎么不起作用

Microsoft Visual Studio Express 2012 - 键盘快捷键不起作用