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