多个快捷键不起作用
multiple shortcut key doesn't work
我在每个 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);
}
顾名思义"QKeySequence",它是一系列必须按下的键。字符串 "L, Right, Space"
表示用户必须按该顺序按下所有 3 个键才能调用该操作!
如果您想要多个 "parallel" 键,即操作应该对这些键中的任何一个做出反应,而不是序列,请使用 QAction::setShortcuts
并为每个键创建一个序列。 (您可以使用 QStringList::split
将字符串拆分为 3 个键。)
我在每个 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);
}
顾名思义"QKeySequence",它是一系列必须按下的键。字符串 "L, Right, Space"
表示用户必须按该顺序按下所有 3 个键才能调用该操作!
如果您想要多个 "parallel" 键,即操作应该对这些键中的任何一个做出反应,而不是序列,请使用 QAction::setShortcuts
并为每个键创建一个序列。 (您可以使用 QStringList::split
将字符串拆分为 3 个键。)