Мне нужно автоматизировать тесты 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 секунд.
Я думаю, вы можете найти все окна сообщений, так как они являются виджетами верхнего уровня, и закрыть их одно за другим:
QWidgetList topWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, topWidgets) {
if (QMessageBox *mb = qobject_cast<QMessageBox *>(w)) {
QTest::keyClick(mb, Qt::Key_Enter);
}
}
Однако проблема в том, что окно сообщения — это модальное диалоговое окно, которое блокирует основной цикл событий. Вам нужно найти способ выполнить код выше после появления окна сообщения.
Других решений пока нет …