¿Cómo se llega hijos de un widget en Qt?
Pregunta
Estoy simulando las pulsaciones de teclas a una aplicación a través de la función KeyPress de Qt. Todo el trabajo fino pulsaciones de teclas. Sin embargo al pasar un QT::Key_Enter
que se supone que pulse el botón OK de la ventana activa, o QT::Key_Cancel
para el botón de cancelación, no hace nada.
Estoy pensando que tal vez, debido a que estos botones no tienen el foco, y la ventana padre sí lo tiene. ¿Cómo se llega a los hijos de una ventana? o más bien encontrar el botón OK o Cancelar en él por lo que podría establecerlo como el ActiveWindow y luego pasar las pulsaciones de teclas con éxito?
Tengo:
QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?
Solución
Se puede utilizar la función de href="https://doc.qt.io/qt-5.12/qobject.html#findChild" rel="noreferrer"> findChild
con el nombre del objeto de conseguir unos específicos niños.
Se puede utilizar también findChildren
para obtener todos los niños que tienen el mismo nombre y la iterar a través de la lista mediante foreach
o QListIterator
.
Para obtener un botón que puede probar:
QPushButton* button = pWin->findChild<QPushButton*>("Button name");
Otros consejos
Es posible que desee poner un evento filtro personalizado en su widget para la captura el evento clave y ver lo que realmente sucede con él.