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)
然后我会检查新对话框中是否存在文本等等。
出现对话框,但是 - 如何在测试中关闭它而不手动关闭它?以及如何测试其中是否存在文本。如果我做对了,在显示对话框时我不能在测试中做任何事情。
我做错了什么?
您可以使用 QTimer
和 QTest::keyClick()。
如果你的 QMessgeBox
的指针是 msgBox
,在 QTimer
的 timeout()
槽中,
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。
希望对您有所帮助。
我有一个 QT 应用程序,我想用 QTest 测试它。简要说明我想做什么:我有一个 Main Window,按钮 Settings 位于其中。如果我点击这个按钮,就会出现 QDialog。我想测试这是否真的发生了
MainWindow mwindow;
QTest::mouseClick(mwindow->showButton, QtCore::Qt::LeftButton)
然后我会检查新对话框中是否存在文本等等。
出现对话框,但是 - 如何在测试中关闭它而不手动关闭它?以及如何测试其中是否存在文本。如果我做对了,在显示对话框时我不能在测试中做任何事情。
我做错了什么?
您可以使用 QTimer
和 QTest::keyClick()。
如果你的 QMessgeBox
的指针是 msgBox
,在 QTimer
的 timeout()
槽中,
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。 希望对您有所帮助。