QTEST - No se puede pasar Qt :: Enter a QpushButton
-
24-10-2019 - |
Pregunta
Estoy creando una aplicación de prueba automatizada usando la biblioteca QTest. Puedo simular las presiones de teclas en la aplicación, excepto cuando llega a una ventana que tiene QDialogButtonbox (guarda y cancele). Aquí está mi código de muestra:
std::auto_ptr<MainForm> myForm( new MainForm( 3, 3 ));
myForm->show();
QTest::keyPress(myForm.get(), Qt::Key_0, NULL, 1000);
QTest::keyRelease(myForm.get(), Qt::Key_0, NULL, 100);
QWidget *pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MyMainForm"));
Ahora, cuando llega a la siguiente ventana, tiene varios controles donde el enfoque de entrada está en un control de edición de texto. Cuando presiono Enter, presiona el botón "Guardar". En teoría, si debo pasar Qt :: Enter al formulario, también debe presionar el botón "Guardar". Sin embargo, cuando intento pasar un KeyPress:
QTest::keyPress(pWin, Qt::Key_Enter, 1000);
No pasa nada ... ¿qué crees que está pasando? He intentado setfocus () al botón pero también no pasa nada ...
Solución
En QDialogButtonBox, es posible que se necesite el botón con
QPushButton * QDialogButtonBox::button ( StandardButton which )
y luego llame a su método setfocus. Si no puede acceder a QDialogButtonbox directamente, puede obtenerlo con
QList<T> QObject::findChildren ( const QString & name = QString() )
o incluso obtener botones a sí mismo con este método ...
Otros consejos
Creo que debe enviar el evento clave al botón o la edición de línea en lugar de la ventana principal.
QWidget *pWin = QApplication::activeWindow();
QTest::keyPress(pwin, Qt::Key_0, NULL, 1000);
QTest::keyRelease(pwin, Qt::Key_0, NULL, 100);
Tengo que decir que la documentación no está clara, pero funciona para mí de esta manera.