QT 在锁定线程中由 QTest 关闭 window

QT close window by QTest in locked thread

我有一个 QT 应用程序,我想用 QTest 测试它。简要说明我想做什么:我有一个 Main Window,按钮 Settings 位于其中。如果我点击这个按钮,就会出现 QDialog。我想测试这是否真的发生了

MainWindow mwindow;
QTest::mouseClick(mwindow->showButton, QtCore::Qt::LeftButton)

然后我会检查新对话框中是否存在文本等等。

出现对话框,但是 - 如何在测试中关闭它而不手动关闭它?以及如何测试其中是否存在文本。如果我做对了,在显示对话框时我不能在测试中做任何事情。

我做错了什么?

您可以使用 QTimerQTest::keyClick()

如果你的 QMessgeBox 的指针是 msgBox,在 QTimertimeout() 槽中,

QTest::keyClick( msgBox, Qt::Key_Enter);

此外,您可以使用 QCOMPARE macro.

测试文本
QCOMPARE( sourceText, targetText );

追加

我认为 QTimer::singleShot 对解决您的问题很有用。

QMessageBox test;
QDialog& dlg = test;
QTimer::singleShot( 2000, &dlg, SLOT( close() ) );
dlg.exec();

在上面的代码中,测试消息框将在 2 秒后关闭。 所以,你的代码可能..

MainWindow mwindow;
QDialog& dlg = mwindow;
QTimer::singleShot( 2000, &dlg, SLOT( close() ) ); //or SLOT( quit() )?
QTest::mouseClick(mwindow->showButton, QtCore::Qt::LeftButton)

但是,我没有测试过。 另外,尝试阅读 this articles。 希望对您有所帮助。