aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorItay Grudev <itay@grudev.com>2015-06-09 17:29:20 +0300
committerItay Grudev <itay@grudev.com>2015-06-09 17:29:20 +0300
commit219383657a4eaf967401984858ebb5c8efa5822d (patch)
tree331e317ddb31667f1fe6503a8454c477e5ced441
parentFixed race condition #3! Library version 2.1; Explained implementation in README (diff)
downloadsingleapplication-219383657a4eaf967401984858ebb5c8efa5822d.tar.xz
QApplication inherit macro
-rw-r--r--README.md18
-rw-r--r--singleapplication.cpp4
-rw-r--r--singleapplication.h9
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 <QApplication>
+// 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: