web-dev-qa-db-fra.com

Comment obtenir les enfants d'un widget dans Qt?

Je simule keyPresses à une application via la fonction KeyPress de Qt. Tous les KeyPresses fonctionnent bien. Cependant, quand je passe un QT::Key_Enter qui est censé appuyer sur le bouton OK de la fenêtre actuellement active, ou QT::Key_Cancel pour le bouton d'annulation, il ne fait rien.

Je pense peut-être, car ces boutons n'ont pas le focus et la fenêtre parent elle-même l'a. Comment obtenez-vous les enfants d'une fenêtre? ou plutôt trouver le bouton OK ou Annuler dessus pour que vous puissiez le définir comme activeWindow puis passer avec succès KeyPresses?

J'ai:

QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?
25
Owen

Vous pouvez utiliser la fonction findChild avec le nom de l'objet pour obtenir des enfants spécifiques. Vous pouvez également utiliser findChildren pour obtenir tous les enfants portant le même nom et effectuer une itération dans la liste à l'aide de foreach ou QListIterator .

Pour obtenir un bouton, vous pouvez essayer:

QPushButton* button = pWin->findChild<QPushButton*>("Button name");
55
Patrice Bernassola

Vous voudrez peut-être mettre un filtre d'événement personnalisé sur votre widget pour capturer l'événement clé et voir ce qui lui arrive vraiment.

2
teukkam