1

QTest ライブラリを使用して自動テスト アプリケーションを作成しています。QDialogBu​​ttonBox (保存、およびキャンセル) を持つウィンドウに到達する場合を除いて、アプリケーションでキーの押下をシミュレートできます。ここに私のサンプルコードがあります:

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::Enter をフォームに渡す必要がある場合は、「保存」ボタンも押す必要があります。ただし、keyPress を渡そうとすると:

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

何も起こらない...何が起こっていると思いますか?ボタンに setFocus() を試しましたが、何も起こりません...

4

2 に答える 2

1

親ウィンドウではなく、ボタンまたは行の編集にキーイベントを送信する必要があると思います。

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

ドキュメントは明確ではないと言わざるを得ませんが、私にとってはこのように機能します。

于 2011-06-07T08:23:39.457 に答える
1

QDialogBu​​ttonBox では、必要なボタンを取得できます

 QPushButton * QDialogButtonBox::button ( StandardButton which )

そして、その SetFocus メソッドを呼び出します。QDialogBu​​ttonBox に直接アクセスできない場合は、次の方法で取得できます

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

または、このメソッドでボタン自体を取得することさえできます...

于 2011-01-25T09:49:24.917 に答える