Add test-case for QWidget closing exits event loop
Also when closed by destruction, which as of today doesn't call QWidget::close and therefore also not QWindow::close. Pick-to: 6.2 Change-Id: I426255e2274eae9262243c769df2264fbaa915b0 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
eb39b5fd36
commit
7c85ad307b
@ -52,6 +52,7 @@
|
|||||||
#include <qmainwindow.h>
|
#include <qmainwindow.h>
|
||||||
#include <qdockwidget.h>
|
#include <qdockwidget.h>
|
||||||
#include <qrandom.h>
|
#include <qrandom.h>
|
||||||
|
#include <qsignalspy.h>
|
||||||
#include <qstylehints.h>
|
#include <qstylehints.h>
|
||||||
#include <qtoolbar.h>
|
#include <qtoolbar.h>
|
||||||
#include <qtoolbutton.h>
|
#include <qtoolbutton.h>
|
||||||
@ -426,6 +427,7 @@ private slots:
|
|||||||
void receivesApplicationFontChangeEvent();
|
void receivesApplicationFontChangeEvent();
|
||||||
void receivesApplicationPaletteChangeEvent();
|
void receivesApplicationPaletteChangeEvent();
|
||||||
void deleteWindowInCloseEvent();
|
void deleteWindowInCloseEvent();
|
||||||
|
void quitOnClose();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool ensureScreenSize(int width, int height);
|
bool ensureScreenSize(int width, int height);
|
||||||
@ -12013,5 +12015,34 @@ void tst_QWidget::deleteWindowInCloseEvent()
|
|||||||
QVERIFY(true);
|
QVERIFY(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Verify that both closing and deleting the last (only) window-widget
|
||||||
|
exits the application event loop.
|
||||||
|
*/
|
||||||
|
void tst_QWidget::quitOnClose()
|
||||||
|
{
|
||||||
|
QSignalSpy quitSpy(qApp, &QApplication::lastWindowClosed);
|
||||||
|
|
||||||
|
std::unique_ptr<QWidget>widget(new QWidget);
|
||||||
|
widget->show();
|
||||||
|
QVERIFY(QTest::qWaitForWindowExposed(widget.get()));
|
||||||
|
|
||||||
|
// QGuiApplication::lastWindowClosed is documented to only be emitted
|
||||||
|
// when we are in exec()
|
||||||
|
QTimer::singleShot(0, widget.get(), [&]{
|
||||||
|
widget->close();
|
||||||
|
});
|
||||||
|
QApplication::exec();
|
||||||
|
QCOMPARE(quitSpy.count(), 1);
|
||||||
|
|
||||||
|
widget->show();
|
||||||
|
QVERIFY(QTest::qWaitForWindowExposed(widget.get()));
|
||||||
|
QTimer::singleShot(0, widget.get(), [&]{
|
||||||
|
widget.reset();
|
||||||
|
});
|
||||||
|
QApplication::exec();
|
||||||
|
QCOMPARE(quitSpy.count(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_MAIN(tst_QWidget)
|
QTEST_MAIN(tst_QWidget)
|
||||||
#include "tst_qwidget.moc"
|
#include "tst_qwidget.moc"
|
||||||
|
Loading…
Reference in New Issue
Block a user