summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp31
-rw-r--r--src/widgets/doc/snippets/dockwidgets/mainwindow.cpp2
-rw-r--r--src/widgets/kernel/qapplication.cpp16
3 files changed, 30 insertions, 19 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index f7775b949f..c89197e219 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -1920,7 +1920,7 @@ void QCoreApplicationPrivate::removePostedEvent(QEvent * event)
bool QCoreApplication::event(QEvent *e)
{
if (e->type() == QEvent::Quit) {
- quit();
+ exit(0);
return true;
}
return QObject::event(e);
@@ -1944,12 +1944,18 @@ void QCoreApplicationPrivate::maybeQuit()
}
/*!
- Tells the application to exit with return code 0 (success).
- Equivalent to calling QCoreApplication::exit(0).
+ Asks the application to quit.
- It's common to connect the QGuiApplication::lastWindowClosed() signal
- to quit(), and you also often connect e.g. QAbstractButton::clicked() or
- signals in QAction, QMenu, or QMenuBar to it.
+ The request may be ignored if the application prevents the quit,
+ for example if one of its windows can't be closed. The application
+ can affect this by handling the QEvent::Quit event on the application
+ level, or QEvent::Close events for the individual windows.
+
+ If the quit is not interrupted the application will exit with return
+ code 0 (success).
+
+ To exit the application without a chance of being interrupted, call
+ exit() directly.
It's good practice to always connect signals to this slot using a
\l{Qt::}{QueuedConnection}. If a signal connected (non-queued) to this slot
@@ -1962,12 +1968,19 @@ void QCoreApplicationPrivate::maybeQuit()
\snippet code/src_corelib_kernel_qcoreapplication.cpp 1
- \sa exit(), aboutToQuit(), QGuiApplication::lastWindowClosed()
+ \sa exit(), aboutToQuit()
*/
-
void QCoreApplication::quit()
{
- exit(0);
+ if (!self)
+ return;
+
+ if (QThread::currentThread() == self->d_func()->mainThread()) {
+ QEvent quitEvent(QEvent::Quit);
+ QCoreApplication::sendEvent(self, &quitEvent);
+ } else {
+ QCoreApplication::postEvent(self, new QEvent(QEvent::Quit));
+ }
}
/*!
diff --git a/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp b/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp
index 95dae667a8..8b604af813 100644
--- a/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp
+++ b/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp
@@ -119,7 +119,7 @@ void MainWindow::setupMenus()
QAction *exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcut(tr("Ctrl+Q"));
exitAct->setStatusTip(tr("Exit the application"));
- connect(exitAct, &QAction::triggered, qApp, &QApplication::closeAllWindows);
+ connect(exitAct, &QAction::triggered, qApp, &QApplication::quit);
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(exitAct);
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 5313d5ff67..a8590c7903 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -1605,19 +1605,17 @@ retry:
Closes all top-level windows.
This function is particularly useful for applications with many top-level
- windows. It could, for example, be connected to a \uicontrol{Exit} entry in the
- \uicontrol{File} menu:
-
- \snippet mainwindows/mdi/mainwindow.cpp 0
+ windows.
The windows are closed in random order, until one window does not accept
- the close event. The application quits when the last window was
- successfully closed; this can be turned off by setting
- \l quitOnLastWindowClosed to false.
+ the close event. The application quits when the last window was successfully
+ closed, unless \l quitOnLastWindowClosed is set to false. To trigger application
+ termination from e.g. a menu, use QCoreApplication::quit() instead of this
+ function.
\sa quitOnLastWindowClosed, lastWindowClosed(), QWidget::close(),
- QWidget::closeEvent(), lastWindowClosed(), QCoreApplication::quit(), topLevelWidgets(),
- QWidget::isWindow()
+ QWidget::closeEvent(), lastWindowClosed(), QCoreApplication::quit(),
+ topLevelWidgets(), QWidget::isWindow()
*/
void QApplication::closeAllWindows()
{