qtest- qt :: qpushbuttonに入ることができません
-
24-10-2019 - |
質問
Qtestライブラリを使用して自動テストアプリケーションを作成しています。 qdialogbuttonbox(保存してキャンセル)を持つウィンドウに到達した場合を除き、アプリケーションのキープレスをシミュレートすることができます。これが私のサンプルコードです:
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"));
次のウィンドウに到達すると、入力がテキスト編集コントロールに焦点を当てているいくつかのコントロールがあります。 Enterを押すと、「保存」ボタンを押します。したがって、理論的には、QT ::をフォームに入力する必要がある場合は、「保存」ボタンも押す必要があります。ただし、キープレスに合格しようとすると:
QTest::keyPress(pWin, Qt::Key_Enter, 1000);
何も起こりません...あなたは何が起こっていると思いますか? setfocus()をボタンに試しましたが、何も起こりません...
解決
qdialogbuttonboxでは、必要なボタンを取得できます
QPushButton * QDialogButtonBox::button ( StandardButton which )
次に、SetFocusメソッドを呼び出します。 qdialogbuttonboxに直接アクセスできない場合は、
QList<T> QObject::findChildren ( const QString & name = QString() )
または、この方法でボタンを自分で取得します...
他のヒント
キーイベントを親ウィンドウの代わりにボタンまたはラインの編集に送信する必要があると思います。
QWidget *pWin = QApplication::activeWindow();
QTest::keyPress(pwin, Qt::Key_0, NULL, 1000);
QTest::keyRelease(pwin, Qt::Key_0, NULL, 100);
ドキュメントは明確ではないと言わざるを得ませんが、このように機能します。
所属していません StackOverflow