我正在使用 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 传递给表单,它也应该按“保存”按钮。但是,当我尝试传递按键时:

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

什么都没发生...你认为发生了什么事?我已经尝试对按钮 setFocus() 但也没有发生任何事情......

有帮助吗?

解决方案

在 QDialogBu​​ttonBox 中你可能会得到需要的按钮

 QPushButton * QDialogButtonBox::button ( StandardButton which )

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

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);

我不得不说文档不清楚,但这种方式对我有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top