2010-11-30 11 views
21

Estoy simulando keyPresses a una aplicación a través de la función KeyPress de Qt. Todas las KeyPresses funcionan bien. Sin embargo, cuando paso un QT::Key_Enter que se supone que presiona el botón Aceptar de la ventana actualmente activa, o QT::Key_Cancel para el botón cancelar, no hace nada.¿Cómo se obtienen los hijos de un widget en Qt?

Estoy pensando que tal vez, porque estos botones no tienen el foco, y la ventana principal lo tiene. ¿Cómo se obtiene a los niños de una ventana? o bien, busque el botón Aceptar o Cancelar en él para que pueda configurarlo como la Ventana activa y luego pasar KeyPresses con éxito?

que tengo:

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

Respuesta

44

Puede utilizar la función findChild con el nombre del objeto de conseguir niños específicos. También puede usar findChildren para obtener todos los elementos secundarios que tengan el mismo nombre y los itere a través de la lista usando foreach o QListIterator.

Para obtener un botón que puede probar:

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

¿cómo uso el QListIterator? – Owen

+0

Se explica en la documentación: http://doc.trolltech.com/4.7/qlistiterator.html#details –

+0

Sí, lo he leído. Pero creo que es diferente cuando obtienes una lista de los hijos de QWidget ... – Owen

2

Es posible que desee poner una costumbre event filter en el widget para capturar el evento clave y ver lo que realmente sucede con él.

Cuestiones relacionadas