2017-09-12 4 views
0

J'ai mis plusieurs raccourcis sur chaque QAction, par ex. 'L, Right, Space'. mais le raccourci 'L' ne fonctionne pas maintenant. 'Right' et 'Space' peuvent fonctionner. De même, si j'inscris «A, B», «A» ne fonctionnera pas et «B» fonctionnera.La touche de raccourci multiple ne fonctionne pas

Si j'utilise QMainWindow::eventFilter() moi-même, au lieu d'utiliser QAction::setShortcut(), toutes les touches de raccourci fonctionneront.

Dans ce cas, bien sûr, le texte de la touche de raccourci ne s'affiche pas dans le menu principal.

J'ai testé sur Windows 7 x64 et 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); 
} 
+0

https://stackoverflow.com/a/46072736/5068056 – aghilpro

+0

Que voulez-vous dire par 'L, Right, Space'? – aghilpro

+0

Il vous recommande d'améliorer la description de votre problème, car il devrait lire ce qui suit: [Comment poser une bonne question?] (Https://stackoverflow.com/help/how-to-ask) – eyllanesc

Répondre

0

Comme le nom "QKeySequence" l'indique, il est une séquence de touches qui doivent être pressées. La chaîne "L, Right, Space" signifie que l'utilisateur devra appuyer sur les 3 touches dans cet ordre pour appeler l'action!

Si vous voulez plusieurs clés "parallèles", c'est-à-dire que l'action doit réagir pour l'une de ces touches, pas la séquence, utilisez QAction::setShortcuts et créez une séquence pour chaque clé. (Vous pouvez utiliser QStringList::split pour diviser la chaîne en 3 clés.)