Проверьте наличие QMessageBox и закройте его.

Мне нужно автоматизировать тесты GUI в C ++ QT с помощью Qtest (в затмении)
Я дал функцию, которая добавляет некоторые вкладки к вкладке (до 9), и если вы пытаетесь открыть 10-ую вкладку, появляется QMessageBox:

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

Поскольку все меню с функцией «добавить вкладку» и все закрытое, я должен был получить доступ к методу, используя слоты и сигналы из моего тестового класса.

Теперь мой вопрос: есть ли способ проверить, есть ли открытые ЛЮБЫЕ QMessageBox и если да, автоматически закрыть их?

РЕДАКТИРОВАТЬ: РЕШЕНО
Я поместил решение vahancho в метод (CloseMessageBoxes) и создал в моем методе test таймер, который затем вызывает метод CloseMessageBoxes ():

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

Появляется несколько сообщений, но все закрываются через 5 секунд.

0

Решение

Я думаю, вы можете найти все окна сообщений, так как они являются виджетами верхнего уровня, и закрыть их одно за другим:

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

Однако проблема в том, что окно сообщения — это модальное диалоговое окно, которое блокирует основной цикл событий. Вам нужно найти способ выполнить код выше после появления окна сообщения.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]