5#ifndef QCOREAPPLICATION_H
6#define QCOREAPPLICATION_H
8#include <QtCore/qglobal.h>
9#include <QtCore/qstring.h>
11#include <QtCore/qcoreevent.h>
12#include <QtCore/qdeadlinetimer.h>
13#include <QtCore/qeventloop.h>
14#include <QtCore/qobject.h>
16#include <QtCore/qscopedpointer.h>
18#include <QtCore/qnativeinterface.h>
21#if defined(Q_OS_WIN) && !defined(tagMSG)
22typedef struct tagMSG MSG;
28class QAbstractEventDispatcher;
29class QAbstractNativeEventFilter;
33#if QT_VERSION < QT_VERSION_CHECK(7
, 0
, 0
)
38#define qApp QCoreApplication::instance()
40class QCoreApplicationPrivate;
48 Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName
49 NOTIFY applicationNameChanged)
50 Q_PROPERTY(QString applicationVersion READ applicationVersion WRITE setApplicationVersion
51 NOTIFY applicationVersionChanged)
52 Q_PROPERTY(QString organizationName READ organizationName WRITE setOrganizationName
53 NOTIFY organizationNameChanged)
54 Q_PROPERTY(QString organizationDomain READ organizationDomain WRITE setOrganizationDomain
55 NOTIFY organizationDomainChanged)
56 Q_PROPERTY(
bool quitLockEnabled READ isQuitLockEnabled WRITE setQuitLockEnabled)
59 Q_DECLARE_PRIVATE(QCoreApplication)
60 friend class QEventLoopLocker;
61#if QT_CONFIG(permissions)
62 using RequestPermissionPrototype =
void(*)(QPermission);
66 enum { ApplicationFlags = QT_VERSION
69 QCoreApplication(
int &argc,
char **argv
71 ,
int = ApplicationFlags
77 static QStringList arguments();
79 static void setAttribute(Qt::ApplicationAttribute attribute,
bool on =
true);
80 static bool testAttribute(Qt::ApplicationAttribute attribute);
82 static void setOrganizationDomain(
const QString &orgDomain);
83 static QString organizationDomain();
84 static void setOrganizationName(
const QString &orgName);
85 static QString organizationName();
86 static void setApplicationName(
const QString &application);
87 static QString applicationName();
88 static void setApplicationVersion(
const QString &version);
89 static QString applicationVersion();
91 static void setSetuidAllowed(
bool allow);
92 static bool isSetuidAllowed();
94#if QT_VERSION >= QT_VERSION_CHECK(7
, 0
, 0
)
95 static QCoreApplication *instance()
noexcept {
return self.loadRelaxed(); }
96 static bool instanceExists()
noexcept {
return instance() !=
nullptr; }
98# ifdef __cpp_lib_atomic_ref
99 static QCoreApplication *instance()
noexcept
100 {
return std::atomic_ref(self).load(std::memory_order_relaxed); }
102 static QCoreApplication *instance()
noexcept {
return self; }
104 static bool instanceExists()
noexcept;
109 static void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents);
110 static void processEvents(QEventLoop::ProcessEventsFlags flags,
int maxtime);
111 static void processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline);
113 static bool sendEvent(QObject *receiver, QEvent *event);
114 static void postEvent(QObject *receiver, QEvent *event,
int priority = Qt::NormalEventPriority);
115 static void sendPostedEvents(QObject *receiver =
nullptr,
int event_type = 0);
116 static void removePostedEvents(QObject *receiver,
int eventType = 0);
117 static QAbstractEventDispatcher *eventDispatcher();
118 static void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher);
120 virtual bool notify(QObject *, QEvent *);
122 static bool startingUp();
123 static bool closingDown();
126 static QString applicationDirPath();
127 static QString applicationFilePath();
128 Q_DECL_CONST_FUNCTION
static qint64 applicationPid()
noexcept;
130#if QT_CONFIG(permissions) || defined(Q_QDOC)
131 Qt::PermissionStatus checkPermission(
const QPermission &permission);
134 template <
typename Functor>
135 void requestPermission(
const QPermission &permission,
const QObject *context, Functor functor);
139 template <
typename Functor,
141 QtPrivate::AreFunctionsCompatible<RequestPermissionPrototype, Functor>::value,
143 void requestPermission(
const QPermission &permission,
144 const typename QtPrivate::ContextTypeForFunctor<Functor>::ContextType *receiver,
147 requestPermissionImpl(permission,
148 QtPrivate::makeCallableObject<RequestPermissionPrototype>(std::forward<Functor>(func)),
153#ifndef QT_NO_CONTEXTLESS_CONNECT
155 template <
typename Functor>
158 template <
typename Functor,
160 QtPrivate::AreFunctionsCompatible<RequestPermissionPrototype, Functor>::value,
163 void requestPermission(
const QPermission &permission, Functor &&func)
165 requestPermission(permission,
nullptr, std::forward<Functor>(func));
169#if QT_CORE_REMOVED_SINCE(6
, 10
)
171 void requestPermission(
const QPermission &permission,
172 QtPrivate::QSlotObjectBase *slotObj,
const QObject *context);
178#if QT_CONFIG(library)
179 static void setLibraryPaths(
const QStringList &);
180 static QStringList libraryPaths();
181 static void addLibraryPath(
const QString &);
182 static void removeLibraryPath(
const QString &);
185#ifndef QT_NO_TRANSLATION
186 static bool installTranslator(QTranslator * messageFile);
187 static bool removeTranslator(QTranslator * messageFile);
190 static QString translate(
const char * context,
192 const char * disambiguation =
nullptr,
195 QT_DECLARE_NATIVE_INTERFACE_ACCESSOR(QCoreApplication)
198 void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
199 void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj);
201 static bool isQuitLockEnabled();
202 static void setQuitLockEnabled(
bool enabled);
206 static void exit(
int retcode = 0);
209 void aboutToQuit(QPrivateSignal);
211 void organizationNameChanged();
212 void organizationDomainChanged();
213 void applicationNameChanged();
214 void applicationVersionChanged();
217 bool event(QEvent *) override;
219# if QT_VERSION < QT_VERSION_CHECK(7
, 0
, 0
)
220# if !defined(Q_CC_MSVC_ONLY) || Q_CC_MSVC_ONLY > 1951
221 QT_DEPRECATED_VERSION_X_6_10(
"This feature will be removed in Qt 7")
223 virtual bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
228 QCoreApplication(QCoreApplicationPrivate &p);
231 std::unique_ptr<QCoreApplicationPrivate> d_ptr;
236 static bool sendSpontaneousEvent(QObject *receiver, QEvent *event);
237 static bool notifyInternal2(QObject *receiver, QEvent *);
238 static bool forwardEvent(QObject *receiver, QEvent *event, QEvent *originatingEvent =
nullptr);
240 void requestPermissionImpl(
const QPermission &permission, QtPrivate::QSlotObjectBase *slotObj,
241 const QObject *context);
244#if QT_VERSION >= QT_VERSION_CHECK(7
, 0
, 0
)
245 static QBasicAtomicPointer<QCoreApplication> self;
247 static QCoreApplication *self;
250 Q_DISABLE_COPY(QCoreApplication)
252 friend class QApplication;
253 friend class QApplicationPrivate;
254 friend class QGuiApplication;
255 friend class QGuiApplicationPrivate;
256 friend class QWidget;
257 friend class QWidgetWindow;
258 friend class QWidgetPrivate;
259 friend class QWindowPrivate;
261 friend class QEventDispatcherUNIXPrivate;
262 friend class QCocoaEventDispatcherPrivate;
263 friend bool qt_sendSpontaneousEvent(QObject *, QEvent *);
265 friend Q_CORE_EXPORT QString qAppName();
266 friend class QCommandLineParserPrivate;
269#define Q_DECLARE_TR_FUNCTIONS(context) public
271 static inline QString tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1
)
272 { return QCoreApplication::translate(#context, sourceText, disambiguation, n); } private
281Q_CORE_EXPORT
QString qAppName();
283#define Q_COREAPP_STARTUP_FUNCTION(AFUNC)
284 static void AFUNC ## _ctor_function() {
285 qAddPreRoutine(AFUNC);
287 Q_CONSTRUCTOR_FUNCTION(AFUNC ## _ctor_function)
290#if defined(Q_OS_WIN) && !defined(QT_NO_DEBUG_STREAM)
291#if QT_DEPRECATED_SINCE(6
, 12
)
292QT_DEPRECATED_VERSION_X_6_12(
"Use qt_decodeMSG() instead.")
293Q_CORE_EXPORT QString decodeMSG(
const MSG &);
295Q_CORE_EXPORT QString qt_decodeMSG(
const MSG &);
296Q_CORE_EXPORT QDebug operator<<(QDebug,
const MSG &);
302#include <QtCore/qcoreapplication_platform.h>
bool testFunctionAttribute(Token tok, FunctionDef *def)
void parseEnumOrFlag(BaseDef *def, QtMocConstants::EnumFlags flags)
bool hasGlobalModuleFragment
void checkSuperClasses(ClassDef *def)
bool inPrivateModuleFragment
bool parseEnum(EnumDef *def, ClassDef *containingClass)
void parseProperty(ClassDef *def, PropertyMode mode)
QByteArray lexemUntil(Token)
EncounteredQmlMacro parseClassInfo(BaseDef *def)
QList< QByteArray > includeFiles
QList< QByteArray > moduleFragmentIncludes
bool requireCompleteTypes
QHash< QByteArray, QByteArray > knownQObjectClasses
void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode)
void parseClassInfo(ClassDef *def)
QByteArrayView strippedFileName() const
bool parseClassHead(ClassDef *def)
void parsePrivateProperty(ClassDef *def, PropertyMode mode)
void parseFlag(BaseDef *def)
void parsePrivateModuleFragment(qsizetype rewind)
void parseSignals(ClassDef *def)
void parseDeclareMetatype()
void parsePropertyAttributes(PropertyDef &propDef)
void parseInterfaces(ClassDef *def)
bool testFunctionRevision(FunctionDef *def)
bool testFunctionAttribute(FunctionDef *def)
void prependNamespaces(BaseDef &def, const QList< NamespaceDef > &namespaceList) const
QHash< QByteArray, QByteArray > knownGadgets
QList< QByteArray > metaTypes
bool parseFunction(FunctionDef *def, bool inMacro=false)
QByteArray parsePropertyAccessor()
QMap< QString, QJsonArray > metaArgs
bool testForFunctionModifiers(FunctionDef *def)
const QByteArray & toFullyQualified(const QByteArray &name) const noexcept
void parseSlots(ClassDef *def, FunctionDef::Access access)
void parseDeclareInterface()
void checkListSizes(const ClassDef &def)
QTypeRevision parseRevision()
QList< QString > parsedPluginMetadataFiles
qsizetype firstSourceSymbolIndex
ModuleUnitKind moduleUnitKind
bool parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
void checkProperties(ClassDef *cdef)
void parseModuleDeclaration(qsizetype rewind, bool exported)
void parseFunctionArguments(FunctionDef *def)
void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access)
bool inClass(const ClassDef *def) const
void parsePluginData(ClassDef *def)
QByteArray modulePartitionName
void generate(FILE *out, FILE *jsonOutput)
QMap< QByteArray, QByteArray > interface2IdMap
bool inNamespace(const NamespaceDef *def) const
QList< ClassDef > classList
QByteArray resolveIncludeNext(const QByteArray &filename, qsizetype startIndex, qsizetype *foundIndex=nullptr)
void setDebugIncludes(bool value)
void parseDefineArguments(Macro *m)
Symbols preprocessed(const QByteArray &filename, QFile *device)
void substituteUntilNewline(Symbols &substituted)
QList< QByteArray > frameworks
QHash< QByteArray, IncludeResolution > nonlocalIncludePathResolutionCache
static bool preprocessOnly
QByteArray resolveInclude(const QByteArray &filename, const QByteArray &relativeTo, qsizetype *foundIndex=nullptr)
static Symbols macroExpandIdentifier(Preprocessor *that, SymbolStack &symbols, int lineNum, QByteArray *macroName)
static Symbols tokenize(const QByteArray &input, int lineNum=1, TokenizeMode mode=TokenizeCpp)
static void macroExpand(Symbols *into, Preprocessor *that, const Symbols &toExpand, qsizetype &index, int lineNum, bool one, const QSet< QByteArray > &excludeSymbols=QSet< QByteArray >())
@ PreparePreprocessorStatement
@ TokenizePreprocessorStatement
The QCommandLineOption class defines a possible command-line option. \inmodule QtCore.
The QCommandLineParser class provides a means for handling the command line options.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
std::map< Key, T > toStdMap() const &
friend size_t qHash(const M &key, size_t seed=0) noexcept(QHashPrivate::noexceptPairHash< typename M::key_type, typename M::mapped_type >())
QMap(std::map< Key, T > &&other)
std::map< Key, T > toStdMap() &&
QMap(const std::map< Key, T > &other)
friend bool comparesEqual(const QMap &lhs, const QMap &rhs)
QMap(std::initializer_list< std::pair< Key, T > > list)
void swap(QMap< Key, T > &other) noexcept
\inmodule QtCore \inheaderfile QPermissions
\macro QT_RESTRICTED_CAST_FROM_ASCII
constexpr Integer toEncodedVersion() const
Transforms the revision into an integer value, encoding the minor version into the least significant ...
constexpr QTypeRevision()=default
Produces an invalid revision.
constexpr quint8 majorVersion() const
Returns the major version encoded in the revision.
static constexpr QTypeRevision fromMajorVersion(Major majorVersion)
Produces a QTypeRevision from the given majorVersion with an invalid minor version.
static constexpr bool isValidSegment(Integer segment)
Returns true if the given number can be used as either major or minor version in a QTypeRevision.
static constexpr QTypeRevision zero()
Produces a QTypeRevision with major and minor version {0}.
static constexpr QTypeRevision fromEncodedVersion(Integer value)
Produces a QTypeRevision from the given value.
constexpr bool hasMajorVersion() const
Returns true if the major version is known, otherwise false.
static constexpr QTypeRevision fromMinorVersion(Minor minorVersion)
Produces a QTypeRevision from the given minorVersion with an invalid major version.
constexpr bool isValid() const
Returns true if the major version or the minor version is known, otherwise false.
friend constexpr Qt::strong_ordering compareThreeWay(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
constexpr quint8 minorVersion() const
Returns the minor version encoded in the revision.
static constexpr QTypeRevision fromVersion(Major majorVersion, Minor minorVersion)
Produces a QTypeRevision from the given majorVersion and minorVersion, both of which need to be a val...
friend constexpr bool comparesEqual(const QTypeRevision &lhs, const QTypeRevision &rhs) noexcept
constexpr bool hasMinorVersion() const
Returns true if the minor version is known, otherwise false.
QByteArray unquotedLexem()
const Symbol & symbol() const
bool dontReplaceSymbol(const QByteArray &name) const
const SafeSymbols & constTop() const
QT_BEGIN_NAMESPACE int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn)
Q_DECLARE_TYPEINFO(EnumDef, Q_RELOCATABLE_TYPE)
QByteArray noRef(const QByteArray &type)
Q_DECLARE_TYPEINFO(PropertyDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(NamespaceDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassInfoDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ClassDef::Interface, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(SuperClass, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(ArgumentDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(PrivateQPropertyDef, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(FunctionDef, Q_RELOCATABLE_TYPE)
std::conditional_t< std::is_same_v< HashKey, q20::remove_cvref_t< KeyArgument > >, KeyArgument, HashKey > HeterogenousConstructProxy
Combined button and popup list for selecting options.
constexpr PropertyFlags DefaultPropertyFlags
@ PropertyAccessInStaticMetaCall
@ RequiresVariantMetaObject
QString && asString(QString &&s)
constexpr QAnyStringArg qStringLikeToArg(QAnyStringView s) noexcept
const QString & asString(const QString &s)
std::is_same< Char, char32_t > IsCompatibleChar32TypeHelper
constexpr bool isLatin1(QLatin1StringView s) noexcept
QHash< MacroName, Macro > Macros
Q_CORE_EXPORT void qAddPostRoutine(QtCleanUpFunction)
void(*) QtStartUpFunction()
void(*) QtCleanUpFunction()
Q_CORE_EXPORT void qAddPreRoutine(QtStartUpFunction)
Q_CORE_EXPORT void qRemovePostRoutine(QtCleanUpFunction)
Q_DECLARE_TYPEINFO(QDateTime::Data, Q_RELOCATABLE_TYPE)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
#define QFILE_MAYBE_EXPLICIT
#define QFILEINFO_MAYBE_EXPLICIT
QList< QFileInfo > QFileInfoList
qsizetype erase_if(QMultiHash< Key, T > &hash, Predicate pred)
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(Class)
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH(Class, Arguments)
#define QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_VALUE(Class)
#define QT_MK_QHASH_COMPAT(X)
QList< QVariant > QVariantList
QMultiMap< Key, T > operator+=(QMultiMap< Key, T > &lhs, const QMultiMap< Key, T > &rhs)
QSet(InputIterator, InputIterator) -> QSet< ValueType >
size_t qHash(const QSet< T > &key, size_t seed=0) noexcept(noexcept(qHashRangeCommutative(key.begin(), key.end(), seed)))
qsizetype erase_if(QSet< T > &set, Predicate pred)
QString operator+(const QString &s1, QChar s2)
QString operator+(QString &&lhs, const QString &rhs)
qsizetype erase_if(QString &s, Predicate pred)
#define QT_UNICODE_LITERAL(str)
#define qPrintable(string)
QString operator+(QString &&lhs, QChar rhs)
QString operator+(QChar s1, const QString &s2)
#define QStringLiteral(str)
QString operator+(const QString &s1, const QString &s2)
qsizetype erase(QString &s, const T &t)
static QByteArray combinePath(const QString &infile, const QString &outfile)
static bool hasNext(const Symbols &symbols, int i)
static const Symbol & next(const Symbols &symbols, int &i)
int runMoc(int argc, char **argv)
static auto openFileForWriting(const QString &name)
void error(const char *msg="Invalid argument")
static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments, bool &hasOptionFiles)
QByteArray composePreprocessorOutput(const Symbols &symbols)
Q_DECLARE_TYPEINFO(QTypeRevision, Q_RELOCATABLE_TYPE)
int main(int argc, char *argv[])
[ctor_close]
QByteArray normalizedType
QJsonObject toJson() const
QMap< QByteArray, QByteArray > flagAliases
QList< ClassInfoDef > classInfoList
QList< EnumDef > enumList
Interface(const QByteArray &_className)
QMap< QString, QJsonArray > metaArgs
QList< QList< Interface > > interfaceList
QList< FunctionDef > publicList
QList< FunctionDef > methodList
QList< PropertyDef > propertyList
QList< FunctionDef > constructorList
QList< SuperClass > superclassList
bool requireCompleteMethodTypes
QList< FunctionDef > slotList
QList< FunctionDef > signalList
QJsonObject toJson() const
QList< QByteArray > nonClassSignalList
QFlags< QtMocConstants::EnumFlags > flags
QByteArray qualifiedType(const ClassDef *cdef) const
QJsonObject toJson(const ClassDef &cdef) const
QList< QByteArray > values
QByteArray normalizedType
QJsonObject toJson(int index) const
static void accessToJson(QJsonObject *obj, Access acs)
QByteArray inPrivateClass
QList< ArgumentDef > arguments
bool returnTypeIsVolatile
Simple structure used by the Doc and DocParser classes.
QByteArray inPrivateClass
QJsonObject toJson() const
constexpr QAnyStringArg(QAnyStringView v) noexcept
constexpr QLatin1StringArg(QLatin1StringView v) noexcept
QLatin1StringArg()=default
constexpr QStringViewArg(QStringView v) noexcept
bool operator==(const SubArray &other) const
SubArray(const QByteArray &a)
SubArray(const QByteArray &a, qsizetype from, qsizetype len)
FunctionDef::Access access
QByteArrayView unquotedLexemView() const
Symbol(int lineNum, Token token)
operator SubArray() const
QByteArrayView lexemView() const
void mergeStringLiteral(const Symbol &next)
bool operator==(const Symbol &o) const
Symbol(int lineNum, Token token, const QByteArray &lexem, qsizetype from, qsizetype len)
QByteArray unquotedLexem() const
Symbol(int lineNum, Token token, const QByteArray &lexem)
size_t qHash(const SubArray &key, size_t seed=0)
Q_DECLARE_TYPEINFO(Symbol, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(SafeSymbols, Q_RELOCATABLE_TYPE)
#define FOR_ALL_TOKENS(F)