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 ...

¿Fue útil?

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.

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