summaryrefslogtreecommitdiffstats
path: root/examples/corelib/ipc/sharedmemory
diff options
context:
space:
mode:
Diffstat (limited to 'examples/corelib/ipc/sharedmemory')
-rw-r--r--examples/corelib/ipc/sharedmemory/CMakeLists.txt35
-rw-r--r--examples/corelib/ipc/sharedmemory/dialog.cpp18
-rw-r--r--examples/corelib/ipc/sharedmemory/dialog.h11
-rw-r--r--examples/corelib/ipc/sharedmemory/main.cpp3
4 files changed, 41 insertions, 26 deletions
diff --git a/examples/corelib/ipc/sharedmemory/CMakeLists.txt b/examples/corelib/ipc/sharedmemory/CMakeLists.txt
index 323c356b72..db94911fc6 100644
--- a/examples/corelib/ipc/sharedmemory/CMakeLists.txt
+++ b/examples/corelib/ipc/sharedmemory/CMakeLists.txt
@@ -1,17 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(sharedmemory LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/corelib/ipc/sharedmemory")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+qt_standard_project_setup()
+
qt_add_executable(sharedmemory
dialog.cpp dialog.h dialog.ui
main.cpp
@@ -22,14 +18,21 @@ set_target_properties(sharedmemory PROPERTIES
MACOSX_BUNDLE TRUE
)
-target_link_libraries(sharedmemory PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
+target_link_libraries(sharedmemory PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
)
install(TARGETS sharedmemory
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_app_script(
+ TARGET sharedmemory
+ OUTPUT_SCRIPT deploy_script
+ NO_UNSUPPORTED_PLATFORM_ERROR
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/corelib/ipc/sharedmemory/dialog.cpp b/examples/corelib/ipc/sharedmemory/dialog.cpp
index 67e4f012a3..4e8f93a77b 100644
--- a/examples/corelib/ipc/sharedmemory/dialog.cpp
+++ b/examples/corelib/ipc/sharedmemory/dialog.cpp
@@ -2,8 +2,12 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "dialog.h"
-#include <QFileDialog>
+
#include <QBuffer>
+#include <QFileDialog>
+#include <QNativeIpcKey>
+
+using namespace Qt::StringLiterals;
/*!
\class Dialog
@@ -29,8 +33,9 @@
each button.
*/
//! [0]
+
Dialog::Dialog(QWidget *parent)
- : QDialog(parent), sharedMemory("QSharedMemoryExample")
+ : QDialog(parent), sharedMemory(QNativeIpcKey(u"QSharedMemoryExample"_s))
{
ui.setupUi(this);
connect(ui.loadFromFileButton, &QPushButton::clicked,
@@ -89,8 +94,13 @@ void Dialog::loadFromFile()
int size = buffer.size();
if (!sharedMemory.create(size)) {
- ui.label->setText(tr("Unable to create shared memory segment."));
- 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/corelib/ipc/sharedmemory/dialog.h b/examples/corelib/ipc/sharedmemory/dialog.h
index 0f8abaa8b6..679af423ff 100644
--- a/examples/corelib/ipc/sharedmemory/dialog.h
+++ b/examples/corelib/ipc/sharedmemory/dialog.h
@@ -6,6 +6,7 @@
#include <QDialog>
#include <QSharedMemory>
+
#include "ui_dialog.h"
//! [0]
@@ -13,21 +14,21 @@ class Dialog : public QDialog
{
Q_OBJECT
- public:
+public:
Dialog(QWidget *parent = nullptr);
- public slots:
+public slots:
void loadFromFile();
void loadFromMemory();
- private:
+private:
void detach();
- private:
+private:
Ui::Dialog ui;
QSharedMemory sharedMemory;
};
//! [0]
-#endif
+#endif // DIALOG_H
diff --git a/examples/corelib/ipc/sharedmemory/main.cpp b/examples/corelib/ipc/sharedmemory/main.cpp
index bf5bd457ae..ffdd656502 100644
--- a/examples/corelib/ipc/sharedmemory/main.cpp
+++ b/examples/corelib/ipc/sharedmemory/main.cpp
@@ -1,9 +1,10 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QApplication>
#include "dialog.h"
+#include <QApplication>
+
//! [0]
int main(int argc, char *argv[])
{