несколько сочетаний клавиш не работают

Я накладываю несколько ярлыков на каждый 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);
}

person Kanryu KATO    schedule 12.09.2017    source источник
comment
stackoverflow.com/a/46072736/5068056   -  person Farhad    schedule 12.09.2017


Ответы (1)


Как следует из названия «QKeySequence», это последовательность клавиш, которые необходимо нажать. Строка "L, Right, Space" означает, что пользователю нужно будет нажать все 3 клавиши в указанном порядке, чтобы вызвать действие!

Если вам нужно несколько «параллельных» клавиш, т. е. действие должно реагировать на любую из этих клавиш, а не на последовательность, используйте QAction::setShortcuts и создайте по одной последовательности для каждого ключа. (вы можете использовать QStringList::split, чтобы разделить строку на 3 ключа.)

person Felix    schedule 12.09.2017