【问题标题】:QTest - Unable to pass Qt::Enter to QPushButtonQTest - 无法将 Qt::Enter 传递给 QPushButton
【发布时间】:2011-01-25 09:31:33
【问题描述】:

我正在使用 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() 到按钮,但也没有任何反应......

【问题讨论】:

    标签: c++ unit-testing qt qtestlib


    【解决方案1】:

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

     QPushButton * QDialogButtonBox::button ( StandardButton which )
    

    然后调用它的 SetFocus 方法。 如果你不能直接访问 QDialogBu​​ttonBox,你可以用

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

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

    【讨论】:

    • 我尝试获取按钮列表并将焦点设置到任何按钮。但是通过 Qt::Enter 并没有做任何事情...... :(
    • QCOMPARE(QString(pWin->objectName()), QString("MyMainForm")); - 这是主窗口...也许您需要获取弹出窗口 ID 并向其发送命令?或者你只是没有发布那段代码?
    • 每当我调用 QTest::keyPress() 时,我已经将按键发送到窗口。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2020-06-26
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多