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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top