检查是否存在QMessageBox并将其关闭
Check for a QMessageBox and close it
我需要使用qtest(在eclipse中)在c++qt中自动化gui测试我给出了一个函数,可以将一些选项卡添加到选项卡小部件中(最多9个),如果您尝试打开第10个选项卡,则会出现一个QMessageBox:
QMessageBox::critical(this, "MAX9",
tr("Only a maximum of 9 tabs can be opened.n"));
因为带有"添加选项卡"功能的整个菜单和所有内容都是私有的,所以我不得不使用插槽和来自测试类的信号来访问该方法。
现在我的问题是,有没有一种方法可以检查是否有任何QMessageBox打开,如果是,则自动关闭它们?
编辑:已解决我将vahancho的解决方案放入一个方法(CloseMessageBoxes)中,并在我的测试方法中创建了一个计时器,该计时器调用CloseMessageBoxers()方法,然后:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(CloseMessageBoxes()));
timer->start(5000);
出现了多个消息框,但所有消息框都在5秒钟后自动关闭。
我认为,你可以找到所有的消息框,因为它们是顶级的小部件,并逐一关闭它们:
QWidgetList topWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, topWidgets) {
if (QMessageBox *mb = qobject_cast<QMessageBox *>(w)) {
QTest::keyClick(mb, Qt::Key_Enter);
}
}
然而,问题是消息框是一个模态对话框,它阻塞了主事件循环。在出现消息框后,您需要找到一种方法来执行上面的代码。
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?