QTest - Impossibile passare Qt :: Invio per QPushButton
-
24-10-2019 - |
Domanda
Sto creando un'applicazione di test automatico utilizzando QTest Biblioteca. Sono in grado di simulare dei tasti sulla domanda, tranne quando si arriva a una finestra con QDialogButtonBox (Salva, Annulla). Ecco il mio codice di esempio:
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"));
Ora, quando si arriva alla finestra successiva, ha diversi comandi in cui il focus è su un controllo di modifica del testo. Quando premo Invio, si preme il pulsante "Salva". Quindi in teoria, se devo passare Qt :: Invio per il modulo, si deve premere il tasto "Salva" pure. Tuttavia quando provo a passare un keyPress:
QTest::keyPress(pWin, Qt::Key_Enter, 1000);
non succede nulla ... cosa ne pensi sta succedendo? Ho provato setFocus () al pulsante, ma non succede nulla e ...
Soluzione
in QDialogButtonBox si può ottenere il pulsante necessario con
QPushButton * QDialogButtonBox::button ( StandardButton which )
e quindi chiamare è il metodo SetFocus. Se non è possibile accedere direttamente QDialogButtonBox, si può ottenere con
QList<T> QObject::findChildren ( const QString & name = QString() )
o anche ottenere pulsanti themself con questo metodo ...
Altri suggerimenti
Credo che è necessario inviare l'evento chiave per il pulsante o riga di modifica invece della finestra padre.
QWidget *pWin = QApplication::activeWindow();
QTest::keyPress(pwin, Qt::Key_0, NULL, 1000);
QTest::keyRelease(pwin, Qt::Key_0, NULL, 100);
Devo dire che la documentazione non è chiaro, ma funziona per me in questo modo.