2010-11-30 19 views
21

Ich simuliere Tastenanschläge zu einer Anwendung durch Qt KeyPress-Funktion. Alle KeyPressen funktionieren gut. Wenn ich jedoch einen QT::Key_Enter passiere, der den OK-Knopf des gerade aktiven Fensters drücken soll, oder QT::Key_Cancel für den Abbrechen-Knopf, tut es nichts.Wie erhalten Sie die Kinder eines Widgets in Qt?

Ich denke vielleicht, weil diese Schaltflächen nicht den Fokus haben, und das Elternfenster selbst hat es. Wie bekommen Sie die Kinder eines Fensters? Oder suchen Sie lieber die Schaltfläche OK oder Abbrechen, damit Sie sie als activeWindow festlegen und KeyPressen erfolgreich übergeben können?

ich habe:

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

Antwort

44

Sie die findChild Funktion mit dem Objektnamen eine spezifische Kinder bekommen können. Sie können auch findChildren verwenden, um alle untergeordneten Elemente mit demselben Namen zu erhalten, und die Liste mit foreach oder durchlaufen.

Um eine Schaltfläche zu erhalten, können Sie versuchen:

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

Wie verwende ich den QListIterator? – Owen

+0

Es wird in der Dokumentation erklärt: http://doc.trolltech.com/4.7/qlistiterator.html#details –

+0

yeah, ich habe das gelesen. Aber ich denke, es ist anders, wenn Sie eine Liste von QWidgets Kindern bekommen ... – Owen

2

Vielleicht möchten Sie einen benutzerdefinierte event filter auf Ihrem Widget setzt das Schlüsselereignis zu erfassen und sehen, was es wirklich passiert.

Verwandte Themen