Question

Je crée une application de test automatisé à l'aide QTest Library. Je suis capable de simuler touches sur l'application, sauf quand il arrive à une fenêtre ayant QDialogButtonBox (Enregistrer et Annuler). Voici mon exemple de code:

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"));

quand il arrive à la fenêtre suivante, il a plusieurs contrôles où l'accent d'entrée est sur un contrôle d'édition de texte. Quand j'appuyez sur Entrée, il appuie sur le bouton « Enregistrer ». Donc, théoriquement, si je dois passer Qt :: Entrez le formulaire, il doit appuyer sur le bouton « Enregistrer » aussi bien. Cependant, lorsque je tente de passer un keyPress:

QTest::keyPress(pWin, Qt::Key_Enter, 1000);

rien ne se passe ... Que pensez-vous qui se passe? J'ai essayé setFocus () à la touche, mais rien ne se passe aussi bien ...

Était-ce utile?

La solution

QDialogButtonBox vous pouvez obtenir avec le bouton nécessaire

 QPushButton * QDialogButtonBox::button ( StandardButton which )

puis appeler la méthode de SetFocus. Si vous ne pouvez pas accéder directement QDialogButtonBox, vous pouvez obtenir avec

QList<T> QObject::findChildren ( const QString & name = QString() )

ou même obtenir des boutons themself avec cette méthode ...

Autres conseils

Je pense que vous devez envoyer l'événement clé de l'édition de bouton ou la ligne au lieu de la fenêtre parent.

QWidget *pWin = QApplication::activeWindow();
QTest::keyPress(pwin, Qt::Key_0, NULL, 1000);
QTest::keyRelease(pwin, Qt::Key_0, NULL, 100);

Je dois dire que la documentation est pas claire, mais il fonctionne pour moi de cette façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top