Frage

Ich erstelle eine automatisierte Testanwendung mit der QTest -Bibliothek. Ich kann die Tastendrücken in der Anwendung simulieren, außer wenn es in ein Fenster mit QDialogButtonBox (Speichern und Abbrechen) gelangt ist. Hier ist mein Beispielcode:

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

Wenn es jetzt zum nächsten Fenster gelangt, verfügt es über mehrere Steuerelemente, bei denen sich der Eingabefokus auf einer Textbearbeitungssteuerung befindet. Wenn ich die Eingabetaste drücke, wird die Taste "Speichern" gedrückt. Wenn ich also qt :: an das Formular übergeben sollte, sollte es auch die Taste "Speichern" drücken. Wenn ich jedoch versuche, einen Schlüsselpress zu übergeben:

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

Nichts passiert ... Was denkst du, ist los? Ich habe setfocus () zum Knopf ausprobiert, aber auch nichts passiert auch ...

War es hilfreich?

Lösung

In QDialogButtonBox erhalten Sie möglicherweise die benötigte Schaltfläche mit der Schaltfläche

 QPushButton * QDialogButtonBox::button ( StandardButton which )

und rufen Sie dann die Setfocus -Methode auf. Wenn Sie nicht direkt auf QdialogButtonbox zugreifen können

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

Oder holen Sie sich sogar Knöpfe mit dieser Methode ...

Andere Tipps

Ich denke, Sie müssen das Schlüsselereignis an die Schaltfläche oder Zeilenbearbeitung anstelle des übergeordneten Fensters senden.

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

Ich muss sagen, dass die Dokumentation nicht klar ist, aber sie funktioniert für mich auf diese Weise.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top