1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtCore module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #ifndef QCOREAPPLICATION_H 41 #define QCOREAPPLICATION_H 42 43 #include <QtCore/qglobal.h> 44 #include <QtCore/qstring.h> 45 #ifndef QT_NO_QOBJECT 46 #include <QtCore/qobject.h> 47 #include <QtCore/qcoreevent.h> 48 #include <QtCore/qeventloop.h> 49 #else 50 #include <QtCore/qscopedpointer.h> 51 #endif 52 53 #ifndef QT_NO_QOBJECT 54 #if defined(Q_OS_WIN) && !defined(tagMSG) 55 typedef struct tagMSG MSG; 56 #endif 57 #endif 58 59 QT_BEGIN_NAMESPACE 60 61 62 class QCoreApplicationPrivate; 63 class QTextCodec; 64 class QTranslator; 65 class QPostEventList; 66 class QStringList; 67 class QAbstractEventDispatcher; 68 class QAbstractNativeEventFilter; 69 70 #define qApp QCoreApplication::instance() 71 72 class Q_CORE_EXPORT QCoreApplication 73 #ifndef QT_NO_QOBJECT 74 : public QObject 75 #endif 76 { 77 #ifndef QT_NO_QOBJECT 78 Q_OBJECT 79 Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName NOTIFY applicationNameChanged) 80 Q_PROPERTY(QString applicationVersion READ applicationVersion WRITE setApplicationVersion NOTIFY applicationVersionChanged) 81 Q_PROPERTY(QString organizationName READ organizationName WRITE setOrganizationName NOTIFY organizationNameChanged) 82 Q_PROPERTY(QString organizationDomain READ organizationDomain WRITE setOrganizationDomain NOTIFY organizationDomainChanged) 83 Q_PROPERTY(bool quitLockEnabled READ isQuitLockEnabled WRITE setQuitLockEnabled) 84 #endif 85 86 Q_DECLARE_PRIVATE(QCoreApplication) 87 public: 88 enum { ApplicationFlags = QT_VERSION 89 }; 90 91 QCoreApplication(int &argc, char **argv 92 #ifndef Q_QDOC 93 , int = ApplicationFlags 94 #endif 95 ); 96 97 ~QCoreApplication(); 98 99 static QStringList arguments(); 100 101 static void setAttribute(Qt::ApplicationAttribute attribute, bool on = true); 102 static bool testAttribute(Qt::ApplicationAttribute attribute); 103 104 static void setOrganizationDomain(const QString &orgDomain); 105 static QString organizationDomain(); 106 static void setOrganizationName(const QString &orgName); 107 static QString organizationName(); 108 static void setApplicationName(const QString &application); 109 static QString applicationName(); 110 static void setApplicationVersion(const QString &version); 111 static QString applicationVersion(); 112 113 static void setSetuidAllowed(bool allow); 114 static bool isSetuidAllowed(); 115 instance()116 static QCoreApplication *instance() { return self; } 117 118 #ifndef QT_NO_QOBJECT 119 static int exec(); 120 static void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents); 121 static void processEvents(QEventLoop::ProcessEventsFlags flags, int maxtime); 122 static void exit(int retcode=0); 123 124 static bool sendEvent(QObject *receiver, QEvent *event); 125 static void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority); 126 static void sendPostedEvents(QObject *receiver = nullptr, int event_type = 0); 127 static void removePostedEvents(QObject *receiver, int eventType = 0); 128 #if QT_DEPRECATED_SINCE(5, 3) 129 QT_DEPRECATED static bool hasPendingEvents(); 130 #endif 131 static QAbstractEventDispatcher *eventDispatcher(); 132 static void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher); 133 134 virtual bool notify(QObject *, QEvent *); 135 136 static bool startingUp(); 137 static bool closingDown(); 138 #endif 139 140 static QString applicationDirPath(); 141 static QString applicationFilePath(); 142 static qint64 applicationPid() Q_DECL_CONST_FUNCTION; 143 144 #if QT_CONFIG(library) 145 static void setLibraryPaths(const QStringList &); 146 static QStringList libraryPaths(); 147 static void addLibraryPath(const QString &); 148 static void removeLibraryPath(const QString &); 149 #endif // QT_CONFIG(library) 150 151 #ifndef QT_NO_TRANSLATION 152 static bool installTranslator(QTranslator * messageFile); 153 static bool removeTranslator(QTranslator * messageFile); 154 #endif 155 156 static QString translate(const char * context, 157 const char * key, 158 const char * disambiguation = nullptr, 159 int n = -1); 160 #if QT_DEPRECATED_SINCE(5, 0) 161 enum Encoding { UnicodeUTF8, Latin1, DefaultCodec = UnicodeUTF8, CodecForTr = UnicodeUTF8 }; 162 QT_DEPRECATED static inline QString translate(const char * context, const char * key, 163 const char * disambiguation, Encoding, int n = -1) 164 { return translate(context, key, disambiguation, n); } 165 #endif 166 167 #ifndef QT_NO_QOBJECT 168 # if QT_DEPRECATED_SINCE(5, 9) 169 QT_DEPRECATED static void flush(); 170 # endif 171 172 void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); 173 void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); 174 175 static bool isQuitLockEnabled(); 176 static void setQuitLockEnabled(bool enabled); 177 178 public Q_SLOTS: 179 static void quit(); 180 181 Q_SIGNALS: 182 void aboutToQuit(QPrivateSignal); 183 184 void organizationNameChanged(); 185 void organizationDomainChanged(); 186 void applicationNameChanged(); 187 void applicationVersionChanged(); 188 189 protected: 190 bool event(QEvent *) override; 191 192 virtual bool compressEvent(QEvent *, QObject *receiver, QPostEventList *); 193 #endif // QT_NO_QOBJECT 194 195 protected: 196 QCoreApplication(QCoreApplicationPrivate &p); 197 198 #ifdef QT_NO_QOBJECT 199 QScopedPointer<QCoreApplicationPrivate> d_ptr; 200 #endif 201 202 private: 203 #ifndef QT_NO_QOBJECT 204 static bool sendSpontaneousEvent(QObject *receiver, QEvent *event); 205 # if QT_DEPRECATED_SINCE(5,6) 206 QT_DEPRECATED bool notifyInternal(QObject *receiver, QEvent *event); // ### Qt6 BIC: remove me 207 # endif 208 static bool notifyInternal2(QObject *receiver, QEvent *); 209 static bool forwardEvent(QObject *receiver, QEvent *event, QEvent *originatingEvent = nullptr); 210 #endif 211 #if QT_CONFIG(library) 212 static QStringList libraryPathsLocked(); 213 #endif 214 215 static QCoreApplication *self; 216 217 Q_DISABLE_COPY(QCoreApplication) 218 219 friend class QApplication; 220 friend class QApplicationPrivate; 221 friend class QGuiApplication; 222 friend class QGuiApplicationPrivate; 223 friend class QWidget; 224 friend class QWidgetWindow; 225 friend class QWidgetPrivate; 226 #ifndef QT_NO_QOBJECT 227 friend class QEventDispatcherUNIXPrivate; 228 friend class QCocoaEventDispatcherPrivate; 229 friend bool qt_sendSpontaneousEvent(QObject*, QEvent*); 230 #endif 231 friend Q_CORE_EXPORT QString qAppName(); 232 friend class QClassFactory; 233 friend class QCommandLineParserPrivate; 234 }; 235 236 #ifdef QT_NO_DEPRECATED 237 # define QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context) 238 #else 239 # define QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context) \ 240 QT_DEPRECATED static inline QString trUtf8(const char *sourceText, const char *disambiguation = nullptr, int n = -1) \ 241 { return QCoreApplication::translate(#context, sourceText, disambiguation, n); } 242 #endif 243 244 #define Q_DECLARE_TR_FUNCTIONS(context) \ 245 public: \ 246 static inline QString tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1) \ 247 { return QCoreApplication::translate(#context, sourceText, disambiguation, n); } \ 248 QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context) \ 249 private: 250 251 typedef void (*QtStartUpFunction)(); 252 typedef void (*QtCleanUpFunction)(); 253 254 Q_CORE_EXPORT void qAddPreRoutine(QtStartUpFunction); 255 Q_CORE_EXPORT void qAddPostRoutine(QtCleanUpFunction); 256 Q_CORE_EXPORT void qRemovePostRoutine(QtCleanUpFunction); 257 Q_CORE_EXPORT QString qAppName(); // get application name 258 259 #define Q_COREAPP_STARTUP_FUNCTION(AFUNC) \ 260 static void AFUNC ## _ctor_function() { \ 261 qAddPreRoutine(AFUNC); \ 262 } \ 263 Q_CONSTRUCTOR_FUNCTION(AFUNC ## _ctor_function) 264 265 #ifndef QT_NO_QOBJECT 266 #if defined(Q_OS_WIN) && !defined(QT_NO_DEBUG_STREAM) 267 Q_CORE_EXPORT QString decodeMSG(const MSG &); 268 Q_CORE_EXPORT QDebug operator<<(QDebug, const MSG &); 269 #endif 270 #endif 271 272 QT_END_NAMESPACE 273 274 #endif // QCOREAPPLICATION_H 275