检查QMessageBox并关闭它

时间:2014-04-15 07:05:16

标签: c++ qt qmessagebox

我需要使用qtest(在eclipse中)在c ++ qt中自动化gui测试 我给了一个函数,它为tabwidget添加了一些标签(最多9个),如果你试图打开第10个标签,会出现一个QMessageBox:

QMessageBox::critical(this, "MAX9",
tr("Only a maximum of 9 tabs can be opened.\n"));

因为带有“添加标签”功能的整个菜单都是私有的,所以我必须使用来自我的测试类的插槽和信号来访问该方法。

现在我的问题是,有没有办法可以检查是否有任何QMessageBox打开,如果有,自动关闭它们?

编辑:已解决 我把vahancho的解决方案放到一个方法(CloseMessageBoxes)中,我在我的testmethod中创建了一个调用CloseMessageBoxes()方法的计时器:

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(CloseMessageBoxes()));
timer->start(5000);

出现了多个消息框但是所有消息框都在5秒后自行关闭。

1 个答案:

答案 0 :(得分:3)

我认为,您可以找到所有消息框,因为它们是顶级小部件,并逐个关闭它们:

QWidgetList topWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, topWidgets) {
    if (QMessageBox *mb = qobject_cast<QMessageBox *>(w)) {            
        QTest::keyClick(mb, Qt::Key_Enter);
    }
}

但问题是消息框是一个模态对话框,它会阻止主事件循环。在出现消息框后,您需要找到一种方法来执行上面的代码。