123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | // Copyright (C) 2021 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QCOREAPPLICATION_P_H#define QCOREAPPLICATION_P_H//// W A R N I N G// -------------//// This file is not part of the Qt API. It exists purely as an// implementation detail. This header file may change from version to// version without notice, or even be removed.//// We mean it.//#include"QtCore/qcoreapplication.h"#if QT_CONFIG(commandlineparser)#include"QtCore/qcommandlineoption.h"#endif#include"QtCore/qreadwritelock.h"#include"QtCore/qtranslator.h"#ifndef QT_NO_QOBJECT#include"private/qobject_p.h"#include"private/qlocking_p.h"#endif#ifdef Q_OS_MACOS#include"private/qcore_mac_p.h"#endif QT_BEGIN_NAMESPACE typedef QList<QTranslator*> QTranslatorList;class QAbstractEventDispatcher;#ifndef QT_NO_QOBJECTclass QEvent;#endifclass Q_CORE_EXPORT QCoreApplicationPrivate #ifndef QT_NO_QOBJECT:public QObjectPrivate #endif{Q_DECLARE_PUBLIC(QCoreApplication)public:enum Type : quint8 { Tty, Gui };QCoreApplicationPrivate(int&aargc,char**aargv);// If not inheriting from QObjectPrivate: force this class to be polymorphic#ifdef QT_NO_QOBJECTvirtual#endif~QCoreApplicationPrivate();voidinit(); QString appName()const; QString appVersion()const;#ifdef Q_OS_DARWINstatic QString infoDictionaryStringProperty(const QString &propertyName);#endif#ifdef Q_OS_WINDOWSvoidinitDebuggingConsole();voidcleanupDebuggingConsole();#endifstatic voidinitLocale();static boolcheckInstance(const char*method);#if QT_CONFIG(commandlineparser)virtualvoidaddQtOptions(QList<QCommandLineOption> *options);#endif#ifndef QT_NO_QOBJECTboolsendThroughApplicationEventFilters(QObject *, QEvent *);static boolsendThroughObjectEventFilters(QObject *, QEvent *);static boolnotify_helper(QObject *, QEvent *);staticinlinevoidsetEventSpontaneous(QEvent *e,bool spontaneous) { e->m_spont = spontaneous; }virtualvoidcreateEventDispatcher();virtualvoideventDispatcherReady();virtualboolcompressEvent(QEvent *event, QObject *receiver, QPostEventList *postedEvents);static voidremovePostedEvent(QEvent *);#ifdef Q_OS_WINstatic voidremovePostedTimerEvent(QObject *object,int timerId);#endif QAtomicInt quitLockRef;voidref();voidderef();virtualboolcanQuitAutomatically();voidquitAutomatically();virtualvoidquit();static QBasicAtomicPointer<QThread> theMainThread;static QBasicAtomicPointer<void> theMainThreadId;static QThread *mainThread();static voidsendPostedEvents(QObject *receiver,int event_type, QThreadData *data);static voidcheckReceiverThread(QObject *receiver);voidcleanupThreadData();struct QPostEventListLocker { QThreadData *threadData;std::unique_lock<QMutex> locker;voidunlock() { locker.unlock(); }};static QPostEventListLocker lockThreadPostEventList(QObject *object);#endif// QT_NO_QOBJECTint&argc;char**argv;#if defined(Q_OS_WIN)// store unmodified arguments for QCoreApplication::arguments()int origArgc =0;std::unique_ptr<char*[]> origArgv;bool consoleAllocated =false;static void*mainInstanceHandle;// HINSTANCE without <windows.h>#endif Type application_type = Tty;#ifndef QT_NO_QOBJECTvoidexecCleanup();bool in_exec =false;bool aboutToQuitEmitted =false;bool threadData_clean =false;static QAbstractEventDispatcher *eventDispatcher;static bool is_app_running;static bool is_app_closing;#endif#ifndef QT_NO_TRANSLATION QTranslatorList translators; QReadWriteLock translateMutex;static boolisTranslatorInstalled(QTranslator *translator);#endifstatic bool setuidAllowed;static uint attribs;staticinlinebooltestAttribute(uint flag) {return attribs & (1<< flag); }voidprocessCommandLineArguments(); QString cachedApplicationFilePath; QString qmljs_debug_arguments;// a string containing arguments for js/qml debugging.inline QString qmljsDebugArgumentsString()const{return qmljs_debug_arguments; }#ifdef QT_NO_QOBJECT QCoreApplication *q_ptr =nullptr;#endif}; QT_END_NAMESPACE #endif// QCOREAPPLICATION_P_H
|