diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/corelib/kernel/qcoreapplication.cpp | 31 | ||||
| -rw-r--r-- | src/widgets/doc/snippets/dockwidgets/mainwindow.cpp | 2 | ||||
| -rw-r--r-- | src/widgets/kernel/qapplication.cpp | 16 |
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() { |
