summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qcoreapplication.h
blob: 105bd7a291a2dd4a51d17c4a3594f3d647a156e0 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
// 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_H#define QCOREAPPLICATION_H#include <QtCore/qglobal.h>#include <QtCore/qstring.h>#ifndef QT_NO_QOBJECT#include <QtCore/qcoreevent.h>#include <QtCore/qdeadlinetimer.h>#include <QtCore/qeventloop.h>#include <QtCore/qobject.h>#else#include <QtCore/qscopedpointer.h>#endif#include <QtCore/qnativeinterface.h>#ifndef QT_NO_QOBJECT#if defined(Q_OS_WIN) && !defined(tagMSG)typedefstruct tagMSG MSG;#endif#endif QT_BEGIN_NAMESPACE class QAbstractEventDispatcher;class QAbstractNativeEventFilter;class QDebug;class QEventLoopLocker;class QPermission;#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)class QPostEventList;#endifclass QTranslator;#define qApp QCoreApplication::instance()class QCoreApplicationPrivate;class Q_CORE_EXPORT QCoreApplication #ifndef QT_NO_QOBJECT:public QObject #endif{#ifndef QT_NO_QOBJECT Q_OBJECT Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName NOTIFY applicationNameChanged)Q_PROPERTY(QString applicationVersion READ applicationVersion WRITE setApplicationVersion NOTIFY applicationVersionChanged)Q_PROPERTY(QString organizationName READ organizationName WRITE setOrganizationName NOTIFY organizationNameChanged)Q_PROPERTY(QString organizationDomain READ organizationDomain WRITE setOrganizationDomain NOTIFY organizationDomainChanged)Q_PROPERTY(bool quitLockEnabled READ isQuitLockEnabled WRITE setQuitLockEnabled)#endifQ_DECLARE_PRIVATE(QCoreApplication)friend class QEventLoopLocker;#if QT_CONFIG(permissions)using RequestPermissionPrototype =void(*)(QPermission);#endifpublic:enum{ ApplicationFlags = QT_VERSION };QCoreApplication(int&argc,char**argv #ifndef Q_QDOC,int= ApplicationFlags #endif);~QCoreApplication();static QStringList arguments();static voidsetAttribute(Qt::ApplicationAttribute attribute,bool on =true);static booltestAttribute(Qt::ApplicationAttribute attribute);static voidsetOrganizationDomain(const QString &orgDomain);static QString organizationDomain();static voidsetOrganizationName(const QString &orgName);static QString organizationName();static voidsetApplicationName(const QString &application);static QString applicationName();static voidsetApplicationVersion(const QString &version);static QString applicationVersion();static voidsetSetuidAllowed(bool allow);static boolisSetuidAllowed();#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)static QCoreApplication *instance() noexcept {return self.loadRelaxed(); }static boolinstanceExists() noexcept {returninstance() !=nullptr; }#elsestatic QCoreApplication *instance() noexcept {return self; }static boolinstanceExists() noexcept;#endif#ifndef QT_NO_QOBJECTstatic intexec();static voidprocessEvents(QEventLoop::ProcessEventsFlags flags =QEventLoop::AllEvents);static voidprocessEvents(QEventLoop::ProcessEventsFlags flags,int maxtime);static voidprocessEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline);static boolsendEvent(QObject *receiver, QEvent *event);static voidpostEvent(QObject *receiver, QEvent *event,int priority =Qt::NormalEventPriority);static voidsendPostedEvents(QObject *receiver =nullptr,int event_type =0);static voidremovePostedEvents(QObject *receiver,int eventType =0);static QAbstractEventDispatcher *eventDispatcher();static voidsetEventDispatcher(QAbstractEventDispatcher *eventDispatcher);virtualboolnotify(QObject *, QEvent *);static boolstartingUp();static boolclosingDown();#endifstatic QString applicationDirPath();static QString applicationFilePath();static qint64 applicationPid() Q_DECL_CONST_FUNCTION;#if QT_CONFIG(permissions) || defined(Q_QDOC)Qt::PermissionStatus checkPermission(const QPermission &permission);# ifdef Q_QDOCtemplate<typename Functor>voidrequestPermission(const QPermission &permission,const QObject *context, Functor functor);# else// requestPermission with context or receiver object; need to require here that receiver is the// right type to avoid ambiguity with the private implementation function.template<typename Functor,std::enable_if_t<QtPrivate::AreFunctionsCompatible<RequestPermissionPrototype, Functor>::value,bool> =true>voidrequestPermission(const QPermission &permission,const typename QtPrivate::ContextTypeForFunctor<Functor>::ContextType *receiver, Functor &&func){requestPermissionImpl(permission,QtPrivate::makeCallableObject<RequestPermissionPrototype>(std::forward<Functor>(func)), receiver);}# endif// Q_QDOC#ifndef QT_NO_CONTEXTLESS_CONNECT#ifdef Q_QDOCtemplate<typename Functor>#else// requestPermission to a functor or function pointer (without context)template<typename Functor,std::enable_if_t<QtPrivate::AreFunctionsCompatible<RequestPermissionPrototype, Functor>::value,bool> =true>#endifvoidrequestPermission(const QPermission &permission, Functor &&func){requestPermission(permission,nullptr,std::forward<Functor>(func));}#endif// QT_NO_CONTEXTLESS_CONNECT#if QT_CORE_REMOVED_SINCE(6, 10)private:voidrequestPermission(const QPermission &permission,QtPrivate::QSlotObjectBase *slotObj,const QObject *context);public:#endif#endif// QT_CONFIG(permission)#if QT_CONFIG(library)static voidsetLibraryPaths(const QStringList &);static QStringList libraryPaths();static voidaddLibraryPath(const QString &);static voidremoveLibraryPath(const QString &);#endif// QT_CONFIG(library)#ifndef QT_NO_TRANSLATIONstatic boolinstallTranslator(QTranslator * messageFile);static boolremoveTranslator(QTranslator * messageFile);#endifstatic QString translate(const char* context,const char* key,const char* disambiguation =nullptr,int n = -1);QT_DECLARE_NATIVE_INTERFACE_ACCESSOR(QCoreApplication)#ifndef QT_NO_QOBJECTvoidinstallNativeEventFilter(QAbstractNativeEventFilter *filterObj);voidremoveNativeEventFilter(QAbstractNativeEventFilter *filterObj);static boolisQuitLockEnabled();static voidsetQuitLockEnabled(bool enabled);public Q_SLOTS:static voidquit();static voidexit(int retcode =0); Q_SIGNALS:voidaboutToQuit(QPrivateSignal);voidorganizationNameChanged();voidorganizationDomainChanged();voidapplicationNameChanged();voidapplicationVersionChanged();protected:boolevent(QEvent *) override;# if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)virtualboolcompressEvent(QEvent *, QObject *receiver, QPostEventList *);# endif#endif// QT_NO_QOBJECTprotected:QCoreApplication(QCoreApplicationPrivate &p);#ifdef QT_NO_QOBJECTstd::unique_ptr<QCoreApplicationPrivate> d_ptr;#endifprivate:#ifndef QT_NO_QOBJECTstatic boolsendSpontaneousEvent(QObject *receiver, QEvent *event);static boolnotifyInternal2(QObject *receiver, QEvent *);static boolforwardEvent(QObject *receiver, QEvent *event, QEvent *originatingEvent =nullptr);voidrequestPermissionImpl(const QPermission &permission,QtPrivate::QSlotObjectBase *slotObj,const QObject *context);#endif#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)static QBasicAtomicPointer<QCoreApplication> self;#elsestatic QCoreApplication *self;#endifQ_DISABLE_COPY(QCoreApplication)friend class QApplication;friend class QApplicationPrivate;friend class QGuiApplication;friend class QGuiApplicationPrivate;friend class QWidget;friend class QWidgetWindow;friend class QWidgetPrivate;friend class QWindowPrivate;#ifndef QT_NO_QOBJECTfriend class QEventDispatcherUNIXPrivate;friend class QCocoaEventDispatcherPrivate;friendboolqt_sendSpontaneousEvent(QObject *, QEvent *);#endiffriend Q_CORE_EXPORT QString qAppName();friend class QCommandLineParserPrivate;};#define Q_DECLARE_TR_FUNCTIONS(context) \public: \ static inline QString tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1) \ { return QCoreApplication::translate(#context, sourceText, disambiguation, n); } \private:typedefvoid(*QtStartUpFunction)();typedefvoid(*QtCleanUpFunction)(); Q_CORE_EXPORT voidqAddPreRoutine(QtStartUpFunction); Q_CORE_EXPORT voidqAddPostRoutine(QtCleanUpFunction); Q_CORE_EXPORT voidqRemovePostRoutine(QtCleanUpFunction); Q_CORE_EXPORT QString qAppName();// get application name#define Q_COREAPP_STARTUP_FUNCTION(AFUNC) \ static void AFUNC ## _ctor_function() { \ qAddPreRoutine(AFUNC); \ } \ Q_CONSTRUCTOR_FUNCTION(AFUNC ## _ctor_function)#ifndef QT_NO_QOBJECT#if defined(Q_OS_WIN) && !defined(QT_NO_DEBUG_STREAM) Q_CORE_EXPORT QString decodeMSG(const MSG &); Q_CORE_EXPORT QDebug operator<<(QDebug,const MSG &);#endif#endif QT_END_NAMESPACE #include <QtCore/qcoreapplication_platform.h>#endif// QCOREAPPLICATION_H
close