2017-04-26 1 views
3

Je rencontre un problème avec mon programme QML. Dans le fichier main.qml haut niveau, j'ai quelques raccourcis clavier comme ceci:Les raccourcis clavier QML interfèrent avec les événements Key OnPressed

Shortcut { 
    sequence: "Up" 
    onActivated: { 
    // yadda yadda 
    } 
} 

Dans un autre dossier, j'ai plusieurs Keys.onPressed appelle comme ceci:

Keys.onPressed: { 
    if (event.key == Qt.Key_Up) { 
    // yadda yadda 
    } 
} 

Apparemment, les raccourcis interfèrent avec les appels OnPressed. Quand je commente les raccourcis, le travail d'OnPressed est très bien. Mais quand ils sont tous deux actifs, il semble que le raccourci intercepte la pression du clavier et empêche l'activation de OnPressed.

Je sais qu'avec les événements de souris, Qt a la variable "acceptée". Si vous voulez qu'un événement continue à se propager dans la pile, vous pouvez simplement définir "accepted = false" dans la fonction OnActivated afin d'accomplir ceci. Cependant, je ne vois aucune variable "acceptée" équivalente dans l'API Raccourcis. Existe-t-il un autre moyen de garantir la propagation correcte de l'événement?

Répondre

2

Pour agir comme un raccourci, Shortcut doit avoir une priorité plus élevée que les gestionnaires de clé dans les éléments de focus actifs. Sinon, cela ne serait pas différent d'un gestionnaire de clé normal. Cependant, il est parfois nécessaire de remplacer un raccourci, comme vous le faites.

Dans Qt 5.8 et les versions antérieures, vous pouvez disable un Shortcut pour l'empêcher de traiter des événements de raccourci dans certaines conditions. Par exemple:

Shortcut { 
    enabled: !someItem.activeFocus 
} 

Dans Qt 5.9, un meilleur mécanisme a été introduit pour cela. Les éléments de mise au point actifs avec les gestionnaires de clés peuvent désormais remplacer les raccourcis en acceptant les événements de remplacement de raccourci à l'aide de Keys.shortcutOverride. Par exemple:

Item { 
    focus: true 
    Keys.onShortcutOverride: { 
     if (event.key == Qt.Key_Up) 
      event.accepted = true 
    } 
    Keys.onUpPressed: ... 
} 
+0

Merci! J'utilise Qt 5.7. J'ai été capable de définir/désactiver intelligemment la variable activée afin d'atteindre mes objectifs. – user1765354