gpt4 book ai didi

qt - 如何通过 QTest 访问 QMessageBox

转载 作者:行者123 更新时间:2023-12-01 08:52:18 27 4
gpt4 key购买 nike

我正在创建一些自动化 GUI 测试 在我的应用程序中使用 QTest .

我可以使用以下命令从我的应用程序访问小部件:

savePushButton = mainWindow->findChild<QPushButton *>("savePushButton");

它工作正常,但现在我必须单击 的确定按钮QMessageBox .

我创建了 QMessageBox 在我的应用程序中是这样的:
if( something_wrong )
{
QMessageBox::warning(new Widget(), "Title", "Something wrong!");
}

我如何才能访问此 QMessageBox ,和它的按钮?

最佳答案

我在以下链接上找到了解决方案:http://www.qtcentre.org/threads/31239-Testing-modal-dialogs-with-QTestLib .

它使用命令 QApplication::topLevelWidgets();获取小部件列表。然后它搜索消息框小部件并模拟关闭消息框的键输入 ( QTest::keyClick(mb, Qt::Key_Enter); )。

例子:

void MyTest::testDialog()
{
QTimer::singleShot(500, this, SLOT(timeOut()));
QVERIFY(functionThatProducesMessageBox());
}

void MyTest::timeOut()
{
QWidgetList allToplevelWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, allToplevelWidgets) {
if (w->inherits("QMessageBox")) {
QMessageBox *mb = qobject_cast<QMessageBox *>(w);
QTest::keyClick(mb, Qt::Key_Enter);
}
}
}

头文件必须包含 Q_OBJECT 宏来使用信号和插槽机制。
例子:
class MyClass: public QWidget
{
Q_OBJECT
public:
...

它对我来说效果很好,因为当消息框出现时 UI(线程)被阻止。

备注 : 添加 时记得重建项目Q_OBJECT 宏。

关于qt - 如何通过 QTest 访问 QMessageBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com