diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2022-11-11 11:40:15 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2022-11-15 12:27:43 +0100 |
commit | 0d517a13525faaedd17dafe10b091284806e18a9 (patch) | |
tree | 157070d953d94668acde3cbbac9e7b608b758924 /examples | |
parent | 5a36ee7028b9138639a6c821056d9c69e8092e7f (diff) | |
download | qtbase-0d517a13525faaedd17dafe10b091284806e18a9.tar.gz |
sharedmemory example: Handle QSharedMemory::AlreadyExists by attaching
Not all platforms clean up the shared memory entries on exit, so the
example needs to handle that case, by attaching instead, as documented.
Change-Id: Ifbcf92d0fad429caf30710bd8a344831cb0d859c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/corelib/ipc/sharedmemory/dialog.cpp | 10 | ||||
-rw-r--r-- | examples/widgets/dialogs/standarddialogs/main.mm | 47 |
2 files changed, 54 insertions, 3 deletions
diff --git a/examples/corelib/ipc/sharedmemory/dialog.cpp b/examples/corelib/ipc/sharedmemory/dialog.cpp index ac171ef943..b656cc0c67 100644 --- a/examples/corelib/ipc/sharedmemory/dialog.cpp +++ b/examples/corelib/ipc/sharedmemory/dialog.cpp @@ -89,9 +89,13 @@ void Dialog::loadFromFile() int size = buffer.size(); if (!sharedMemory.create(size)) { - ui.label->setText(tr("Unable to create shared memory segment: %1") - .arg(sharedMemory.errorString())); - return; + if (sharedMemory.error() == QSharedMemory::AlreadyExists) { + sharedMemory.attach(); + } else { + ui.label->setText(tr("Unable to create or attach to shared memory segment: %1") + .arg(sharedMemory.errorString())); + return; + } } sharedMemory.lock(); char *to = (char*)sharedMemory.data(); diff --git a/examples/widgets/dialogs/standarddialogs/main.mm b/examples/widgets/dialogs/standarddialogs/main.mm new file mode 100644 index 0000000000..558ef4e680 --- /dev/null +++ b/examples/widgets/dialogs/standarddialogs/main.mm @@ -0,0 +1,47 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QApplication> +#include <QScreen> +#include <QStyleHints> +#include <QTranslator> +#include <QLocale> +#include <QLibraryInfo> + +#include "dialog.h" + +#include <AppKit/AppKit.h> + +using namespace Qt::StringLiterals; + +int main(int argc, char *argv[]) +{ + [NSApplication sharedApplication]; + NSApplicationLoad(); + NSApplicationLoad(); + [NSApp run]; + + QApplication app(argc, argv); + //app.setAttribute(Qt::AA_DontUseNativeDialogs); + +#if QT_CONFIG(translation) + QTranslator translator; + if (translator.load(QLocale::system(), u"qtbase"_s, u"_"_s, + QLibraryInfo::path(QLibraryInfo::TranslationsPath))) { + app.installTranslator(&translator); + } +#endif + + QGuiApplication::setApplicationDisplayName(Dialog::tr("Standard Dialogs")); + + Dialog dialog; + if (!QGuiApplication::styleHints()->showIsFullScreen() && !QGuiApplication::styleHints()->showIsMaximized()) { + const QRect availableGeometry = dialog.screen()->availableGeometry(); + dialog.resize(availableGeometry.width() / 3, availableGeometry.height() * 2 / 3); + dialog.move((availableGeometry.width() - dialog.width()) / 2, + (availableGeometry.height() - dialog.height()) / 2); + } + dialog.show(); + + return app.exec(); +} |