QTest - 无法将Qt :: Enter传递给QPushButton

时间:2011-01-25 09:31:33

标签: c++ unit-testing qt qtestlib

我正在使用QTest Library创建自动化测试应用程序。我能够在应用程序上模拟按键,除非它到达具有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传递给Form,它也应该按下“Save”按钮。但是,当我尝试传递一个keyPress:

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

没有任何反应......您认为发生了什么?我已经尝试了setFocus()到按钮但是没有任何事情发生......

2 个答案:

答案 0 :(得分:1)

在QDialogBu​​ttonBox中,您可能需要使用

按钮
 QPushButton * QDialogButtonBox::button ( StandardButton which )

然后调用它的SetFocus方法。 如果您无法直接访问QDialogBu​​ttonBox,可以使用

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

甚至用这种方法获取按钮...

答案 1 :(得分:1)

我认为您需要将键事件发送到按钮或行编辑而不是父窗口。

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

我不得不说文档不清楚,但它对我有用。