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?
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top