2009-09-02 5 views

Répondre

4

Je suppose que vous avez écrit un slot et l'avez connecté au signal QComboBox::editTextChanged().
Ce signal est déclenché lorsque le texte change et Entrez ne change pas le texte, il l'accepte. Si vous voulez capturer Carriage Return, vous pouvez suivre un certain nombre de méthodes.

  1. Sous-classe QComboBox.
    Remplacer keyPressEvent(): appelez d'abord QComboBox::keyPressEvent() puis vérifiez si la touche enfoncée est Entrez. Si c'est le cas, émettre un signal.
    Utilisez cette sous-classe quand vous en avez besoin. Rechercher sur la promotion des widgets dans QDesigner si vous ne savez pas comment.

  2. Implémentez une nouvelle classe qui hérite de QObject. Dans cette classe, remplacez eventFilter(): vérifiez si l'événement est une touche. Si c'est le cas, vérifiez si c'est la Entrez la clé. Si c'est le cas, émettre un signal.
    Ensuite, créez une instance de cette classe et définissez-la comme filtre d'événement sur votre QComboBox. Connectez un emplacement au signal de cette instance, que vous avez implémenté.

Si ceux-ci ne sont pas claires, je recommande la lecture des pages suivantes:

Using Custom Widgets with Qt designer

Qt Events & Event Filters

3

Vous pouvez également regarder dans le signal activated(const QString&). Il pourrait être émis lorsque l'utilisateur frappe entrer.

+0

c'est exactement ce dont j'avais besoin. Frustrant, editTextChanged() est appelé avant les autres signaux lorsque l'utilisateur change de sélection, il n'y a donc aucun moyen de savoir/pourquoi/le texte a changé. Si j'ai un signal activé() ou un currentIndexChanged() avant editTextChanged() alors je pourrais faire quelque chose de différent ... Hélas. –

Questions connexes