Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-04 09:23:08

0001 // Copyright (C) 2019 The Qt Company Ltd.
0002 // Copyright (C) 2019 Olivier Goffart <ogoffart@woboq.com>
0003 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0004 // Qt-Security score:significant reason:default
0005 
0006 #ifndef QTMETAMACROS_H
0007 #define QTMETAMACROS_H
0008 
0009 #include <QtCore/qglobal.h>
0010 #include <QtCore/qtclasshelpermacros.h>
0011 
0012 QT_BEGIN_NAMESPACE
0013 
0014 #ifndef Q_MOC_OUTPUT_REVISION
0015 // This number should be in sync with moc's outputrevision.h
0016 #define Q_MOC_OUTPUT_REVISION 69
0017 #endif
0018 
0019 // The following macros can be defined by tools that understand Qt
0020 // to have the information from the macro.
0021 #ifndef QT_ANNOTATE_CLASS
0022 # define QT_ANNOTATE_CLASS(type, ...)
0023 #endif
0024 #ifndef QT_ANNOTATE_CLASS2
0025 # define QT_ANNOTATE_CLASS2(type, a1, a2)
0026 #endif
0027 #ifndef QT_ANNOTATE_FUNCTION
0028 # define QT_ANNOTATE_FUNCTION(x)
0029 #endif
0030 #ifndef QT_ANNOTATE_ACCESS_SPECIFIER
0031 # define QT_ANNOTATE_ACCESS_SPECIFIER(x)
0032 #endif
0033 
0034 // The following macros are our "extensions" to C++
0035 // They are used, strictly speaking, only by the moc.
0036 
0037 #ifndef Q_MOC_RUN
0038 #ifndef QT_NO_META_MACROS
0039 # if defined(QT_NO_KEYWORDS)
0040 #  define QT_NO_EMIT
0041 # else
0042 #   ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS
0043 #     define slots Q_SLOTS
0044 #     define signals Q_SIGNALS
0045 #   endif
0046 # endif
0047 # define Q_SLOTS QT_ANNOTATE_ACCESS_SPECIFIER(qt_slot)
0048 # define Q_SIGNALS public QT_ANNOTATE_ACCESS_SPECIFIER(qt_signal)
0049 # define Q_PRIVATE_SLOT(d, signature) QT_ANNOTATE_CLASS2(qt_private_slot, d, signature)
0050 # define Q_EMIT
0051 #ifndef QT_NO_EMIT
0052 # define emit
0053 #endif
0054 #ifndef Q_CLASSINFO
0055 # define Q_CLASSINFO(name, value)
0056 #endif
0057 #define Q_PLUGIN_METADATA(x) QT_ANNOTATE_CLASS(qt_plugin_metadata, x)
0058 #define Q_INTERFACES(x) QT_ANNOTATE_CLASS(qt_interfaces, x)
0059 #define Q_PROPERTY(...) QT_ANNOTATE_CLASS(qt_property, __VA_ARGS__)
0060 #define Q_PRIVATE_PROPERTY(d, text) QT_ANNOTATE_CLASS2(qt_private_property, d, text)
0061 #ifndef Q_REVISION
0062 # define Q_REVISION(...)
0063 #endif
0064 #define Q_OVERRIDE(text) QT_ANNOTATE_CLASS(qt_override, text)
0065 #define QDOC_PROPERTY(text) QT_ANNOTATE_CLASS(qt_qdoc_property, text)
0066 #define Q_ENUMS(x) QT_ANNOTATE_CLASS(qt_enums, x)
0067 #define Q_FLAGS(x) QT_ANNOTATE_CLASS(qt_enums, x)
0068 #define Q_ENUM_IMPL(ENUM) \
0069     friend constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; } \
0070     friend constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; }
0071 #define Q_ENUM(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_IMPL(x)
0072 #define Q_FLAG(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_IMPL(x)
0073 #define Q_ENUM_NS_IMPL(ENUM) \
0074     inline constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; } \
0075     inline constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; }
0076 #define Q_ENUM_NS(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_NS_IMPL(x)
0077 #define Q_FLAG_NS(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_NS_IMPL(x)
0078 #define Q_SCRIPTABLE QT_ANNOTATE_FUNCTION(qt_scriptable)
0079 #define Q_INVOKABLE  QT_ANNOTATE_FUNCTION(qt_invokable)
0080 #define Q_SIGNAL QT_ANNOTATE_FUNCTION(qt_signal)
0081 #define Q_SLOT QT_ANNOTATE_FUNCTION(qt_slot)
0082 #define Q_MOC_INCLUDE(...) QT_ANNOTATE_CLASS(qt_moc_include, __VA_ARGS__)
0083 #endif // !QT_NO_META_MACROS
0084 
0085 #ifndef QT_NO_TRANSLATION
0086 // full set of tr functions
0087 #  define QT_TR_FUNCTIONS \
0088     static inline QString tr(const char *s, const char *c = nullptr, int n = -1) \
0089         { return staticMetaObject.tr(s, c, n); }
0090 #else
0091 // inherit the ones from QObject
0092 # define QT_TR_FUNCTIONS
0093 #endif
0094 
0095 #ifdef Q_QDOC
0096 #define QT_TR_FUNCTIONS
0097 #endif
0098 
0099 #if defined(Q_CC_CLANG)
0100 #  if Q_CC_CLANG >= 1100
0101 #    define Q_OBJECT_NO_OVERRIDE_WARNING    QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") QT_WARNING_DISABLE_CLANG("-Wsuggest-override")
0102 #  elif Q_CC_CLANG >= 306
0103 #    define Q_OBJECT_NO_OVERRIDE_WARNING    QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override")
0104 #  endif
0105 #elif defined(Q_CC_GNU) && Q_CC_GNU >= 501
0106 #  define Q_OBJECT_NO_OVERRIDE_WARNING      QT_WARNING_DISABLE_GCC("-Wsuggest-override")
0107 #elif defined(Q_CC_MSVC)
0108 #  define Q_OBJECT_NO_OVERRIDE_WARNING      QT_WARNING_DISABLE_MSVC(26433)
0109 #else
0110 #  define Q_OBJECT_NO_OVERRIDE_WARNING
0111 #endif
0112 
0113 #if defined(Q_CC_GNU) && Q_CC_GNU >= 600
0114 #  define Q_OBJECT_NO_ATTRIBUTES_WARNING    QT_WARNING_DISABLE_GCC("-Wattributes")
0115 #else
0116 #  define Q_OBJECT_NO_ATTRIBUTES_WARNING
0117 #endif
0118 
0119 #define QT_META_OBJECT_VARS \
0120     template <typename> static constexpr auto qt_create_metaobjectdata();       \
0121     template <typename MetaObjectTagType> static constexpr inline auto          \
0122     qt_staticMetaObjectContent = qt_create_metaobjectdata<MetaObjectTagType>(); \
0123     template <typename MetaObjectTagType> static constexpr inline auto          \
0124     qt_staticMetaObjectStaticContent = qt_staticMetaObjectContent<MetaObjectTagType>.staticData;\
0125     template <typename MetaObjectTagType> static constexpr inline auto          \
0126     qt_staticMetaObjectRelocatingContent = qt_staticMetaObjectContent<MetaObjectTagType>.relocatingData;
0127 
0128 #define QT_OBJECT_GADGET_COMMON  \
0129     QT_META_OBJECT_VARS \
0130     Q_OBJECT_NO_ATTRIBUTES_WARNING \
0131     Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
0132 
0133 /* qmake ignore Q_OBJECT */
0134 #define Q_OBJECT \
0135 public: \
0136     QT_WARNING_PUSH \
0137     Q_OBJECT_NO_OVERRIDE_WARNING \
0138     static const QMetaObject staticMetaObject; \
0139     virtual const QMetaObject *metaObject() const; \
0140     virtual void *qt_metacast(const char *); \
0141     virtual int qt_metacall(QMetaObject::Call, int, void **); \
0142     QT_TR_FUNCTIONS \
0143 private: \
0144     QT_OBJECT_GADGET_COMMON \
0145     QT_DEFINE_TAG_STRUCT(QPrivateSignal); \
0146     QT_WARNING_POP \
0147     QT_ANNOTATE_CLASS(qt_qobject, "")
0148 
0149 /* qmake ignore Q_OBJECT */
0150 #define Q_OBJECT_FAKE Q_OBJECT QT_ANNOTATE_CLASS(qt_fake, "")
0151 
0152 #ifndef QT_NO_META_MACROS
0153 /* qmake ignore Q_GADGET_EXPORT */
0154 #define Q_GADGET_EXPORT(...) \
0155 public: \
0156     static __VA_ARGS__ const QMetaObject staticMetaObject; \
0157     void qt_check_for_QGADGET_macro(); \
0158     typedef void QtGadgetHelper; \
0159 private: \
0160     QT_WARNING_PUSH \
0161     QT_OBJECT_GADGET_COMMON \
0162     QT_WARNING_POP \
0163     QT_ANNOTATE_CLASS(qt_qgadget, "") \
0164     /*end*/
0165 
0166 /* qmake ignore Q_GADGET */
0167 #define Q_GADGET Q_GADGET_EXPORT()
0168 
0169     /* qmake ignore Q_NAMESPACE_EXPORT */
0170 #define Q_NAMESPACE_EXPORT(...) \
0171     extern __VA_ARGS__ const QMetaObject staticMetaObject; \
0172     template <typename> static constexpr auto qt_create_metaobjectdata(); \
0173     QT_ANNOTATE_CLASS(qt_qnamespace, "") \
0174     /*end*/
0175 
0176 /* qmake ignore Q_NAMESPACE */
0177 #define Q_NAMESPACE Q_NAMESPACE_EXPORT() \
0178     /*end*/
0179 
0180 #endif // !QT_NO_META_MACROS
0181 
0182 #else // Q_MOC_RUN
0183 #define slots slots
0184 #define signals signals
0185 #define Q_SLOTS Q_SLOTS
0186 #define Q_SIGNALS Q_SIGNALS
0187 #define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value)
0188 #define Q_INTERFACES(x) Q_INTERFACES(x)
0189 #define Q_PROPERTY(text) Q_PROPERTY(text)
0190 #define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text)
0191 #define Q_REVISION(...) Q_REVISION(__VA_ARGS__)
0192 #define Q_OVERRIDE(text) Q_OVERRIDE(text)
0193 #define Q_ENUMS(x) Q_ENUMS(x)
0194 #define Q_FLAGS(x) Q_FLAGS(x)
0195 #define Q_ENUM(x) Q_ENUM(x)
0196 #define Q_FLAG(x) Q_FLAG(x)
0197 #define Q_ENUM_NS(x) Q_ENUM_NS(x)
0198 #define Q_FLAG_NS(x) Q_FLAG_NS(x)
0199  /* qmake ignore Q_OBJECT */
0200 #define Q_OBJECT Q_OBJECT
0201  /* qmake ignore Q_OBJECT */
0202 #define Q_OBJECT_FAKE Q_OBJECT_FAKE
0203  /* qmake ignore Q_GADGET */
0204 #define Q_GADGET Q_GADGET
0205 #define Q_SCRIPTABLE Q_SCRIPTABLE
0206 #define Q_INVOKABLE Q_INVOKABLE
0207 #define Q_SIGNAL Q_SIGNAL
0208 #define Q_SLOT Q_SLOT
0209 #endif //Q_MOC_RUN
0210 
0211 QT_END_NAMESPACE
0212 
0213 #endif // QTMETAMACROS_H