Question

Je suis nouveau dans la programmation QT GUI et j'utilise QT Creator.Le problème que je vois concerne mon bouton-poussoir et ma modification de ligne lorsque l'utilisateur appuie sur la touche Entrée.Mon programme ouvre une boîte de groupe et permet à l'utilisateur de saisir un mot de passe et d'appuyer sur ok ou sur annuler.

Si l'utilisateur appuie sur la touche Entrée lorsque l'édition de ligne a le focus, le programme semble émettre un deuxième signal pour QAbstractButton. animateClick(); Ainsi, lorsque la zone de groupe suivante s'ouvre et invite l'utilisateur à appuyer sur ok ou à annuler, le programme continue comme si l'utilisateur appuyait sur le bouton ok.

J'ai configuré mes boutons poussoirs pour permettre à l'utilisateur d'appuyer sur la touche de tabulation et d'appuyer sur la touche Entrée.Afin d'obtenir cette fonctionnalité, j'ai défini okbutton->setAutodefault(true); et CancelButton->setAutodefault(true);

J'ai également un lineEdit permettant à l'utilisateur de saisir un mot de passe et d'appuyer sur Entrée.J'ai configuré cela en connectant le signal de retour enfoncé au bouton ok indiqué ci-dessous.

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

J'ai également essayé de connecter le signal de retour directement à l'emplacement mais le problème persiste.

connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(chkPassword()));

Si l'utilisateur clique sur okButton avec la souris ou si je définis okButton->setAutoDefault(false); le programme fonctionne comme il se doit.Je voudrais savoir s'il est possible de désactiver le signal animateClick qui se produit lorsque la modification de ligne a le focus.

Toute l'aide pouvant etre apportée serait très appréciée.

Était-ce utile?

La solution

Essayez de ne jamais vous connecter lineEdit avec le okButton, c'est à dire.commentez cette ligne dans votre code :

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

et vérifiez si le programme se comporte comme vous le souhaitez.


Aussi, vous voudrez peut-être appeler

okButton->setDefault(true);

en plus de votre setAutoDefault() appelle les deux boutons, en fonction de ce que vous voulez exactement se produire lorsque l'utilisateur appuie sur Entrer avec diverses choses au point.Voir cette réponse pour plus d'informations à ce sujet.


Je suppose, puisque vous n'en parlez jamais, que vous n'appelez pas setDefault() pour n’importe lequel de vos boutons.Ainsi, okButton est votre premier bouton avec le autoDefault propriété définie sur true.Cela signifie que okButton devient le « bouton de choix » de la boîte de dialogue chaque fois que la boîte de dialogue doit gérer un Entrer une pression sur une touche qui ne s'est pas produite sur un autre autoDefault bouton (tel que cancelButton dans ton cas).

Chaque fois qu'un widget de votre boîte de dialogue reçoit un Entrer en appuyant sur une touche et ne consomme pas l'événement lui-même, l'événement finit par être géré par la logique de gestion des boutons par défaut de la boîte de dialogue, ce qui se traduit par un clic sur le "bouton de choix" susmentionné.

QLineEdit n'est pas utilisé pour l'édition multiligne, il ne consomme donc probablement pas l'événement d'appui sur la touche pour Entrer (tout en le manipulant, en ce sens qu'il envoie le returnPressed() signal).Ainsi, votre connexion de returnPressed() finit par faire ce qu'il fait, et, en plus, la logique du bouton par défaut finit par cliquer une seconde fois sur votre bouton.

Consultez également ce fil sur les forums du projet Qt ce qui semble résoudre le même problème différemment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top