2010-11-30 8 views
21

Je simule keyPresses à une application via la fonction KeyPress de Qt. Toutes les KeyPress 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.Comment obtenez-vous les enfants d'un widget dans Qt?

Je pense peut-être, parce que ces boutons n'ont pas le focus, et la fenêtre parente elle-même l'a. Comment obtenez-vous les enfants d'une fenêtre? ou plutôt trouvez le bouton OK ou Annuler pour pouvoir le définir comme activeWindow et ensuite réussir KeyPress avec succès?

J'ai:

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

Répondre

44

Vous pouvez utiliser la fonction findChild avec le nom de l'objet pour obtenir un enfant en particulier. Vous pouvez également utiliser findChildren pour obtenir tous les enfants qui ont le même nom et parcourir la liste en utilisant foreach ou QListIterator.

Pour obtenir un bouton, vous pouvez essayer:

QPushButton* button = pWin->findChild<QPushButton*>("Button name"); 
+0

Comment utiliser QListIterator? – Owen

+0

Il est expliqué dans la documentation: http://doc.trolltech.com/4.7/qlistiterator.html#details –

+0

ouais, j'ai lu ça. Mais je pense que c'est différent quand vous obtenez une liste des enfants de QWidget ... – Owen

2

Vous pouvez mettre une coutume event filter sur votre widget pour capturer l'événement clé et de voir ce qui se passe vraiment à elle.