From 219383657a4eaf967401984858ebb5c8efa5822d Mon Sep 17 00:00:00 2001 From: Itay Grudev Date: Tue, 9 Jun 2015 17:29:20 +0300 Subject: QApplication inherit macro --- README.md | 18 ++++++++++++++++++ singleapplication.cpp | 4 ++-- singleapplication.h | 9 +++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 31e1b86..7003edb 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,24 @@ The ```Show Up``` signal ------------------------ The SingleApplication class implements a ```showUp()``` signal. You can bind to that signal to raise your application's window when a new instance had been started. +Note that since ```SingleApplication``` extends the ```QApplication``` class you can do the following: +```cpp +QObject::connect(QApplication::instance(), SIGNAL(showUp()), window, SLOT(raise())); // window is your QWindow instance +``` + +Using ```QApplication::instance()``` is a neat way to get the ```SingleApplication``` instance at any place in your program. + +Extending from other application classes +----------------------- + +```SingleApplication``` extends from the ```QApplication``` class by default , but you can easily change that to ```QGuiApplication``` or ```QCoreApplication``` from the ```singleapplication.h``` file, using the ```QAPPLICATION_CLASS``` macro. + +__Example:__ + +```cpp +#define QAPPLICATION_CLASS QCoreApplication +``` + Implementation -------------- The library is implemented with a QSharedMemory block which is thread safe and guarantees a race condition will not occur. It also uses a QLocalSocket to notify the main process that a new instance had been spawned and thus invoke the ```showUp()``` signal. diff --git a/singleapplication.cpp b/singleapplication.cpp index ca2b716..0bcbc12 100644 --- a/singleapplication.cpp +++ b/singleapplication.cpp @@ -75,9 +75,9 @@ public: * @param argv */ SingleApplication::SingleApplication(int &argc, char *argv[]) - : QApplication(argc, argv), d_ptr(new SingleApplicationPrivate(this)) + : QAPPLICATION_CLASS(argc, argv), d_ptr(new SingleApplicationPrivate(this)) { - QString serverName = QApplication::organizationName() + QApplication::applicationName(); + QString serverName = QAPPLICATION_CLASS::organizationName() + QAPPLICATION_CLASS::applicationName(); serverName.replace(QRegExp("[^\\w\\-. ]"), ""); // Garantee thread safe behaviour with a shared memory block diff --git a/singleapplication.h b/singleapplication.h index 669f878..3766d61 100644 --- a/singleapplication.h +++ b/singleapplication.h @@ -1,7 +1,12 @@ #ifndef SINGLE_APPLICATION_H #define SINGLE_APPLICATION_H -#include +// Change this to inherit from QGuiApplication or QCoreApplication +#define QAPPLICATION_CLASS QApplication + +#define QUOTE(C) #C +#define INCLUDE_FILE(C) QUOTE(C) +#include INCLUDE_FILE(QAPPLICATION_CLASS) class SingleApplicationPrivate; @@ -9,7 +14,7 @@ class SingleApplicationPrivate; * @brief The SingleApplication class handles multipe instances of the same Application * @see QApplication */ -class SingleApplication : public QApplication +class SingleApplication : public QAPPLICATION_CLASS { Q_OBJECT public: -- cgit v1.2.1