QTest - Impossible de passer Qt :: Entrée pour QPushButton
-
24-10-2019 - |
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 ...
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.