Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qtmetamacros.h
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// Copyright (C) 2019 Olivier Goffart <ogoffart@woboq.com>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
6#ifndef QTMETAMACROS_H
7#define QTMETAMACROS_H
8
9#include <QtCore/qglobal.h>
10#include <QtCore/qtclasshelpermacros.h>
11
13
14#ifndef Q_MOC_OUTPUT_REVISION
15// This number should be in sync with moc's outputrevision.h
16#define Q_MOC_OUTPUT_REVISION 69
17#endif
18
19// The following macros can be defined by tools that understand Qt
20// to have the information from the macro.
21#ifndef QT_ANNOTATE_CLASS
22# define QT_ANNOTATE_CLASS(type, ...)
23#endif
24#ifndef QT_ANNOTATE_CLASS2
25# define QT_ANNOTATE_CLASS2(type, a1, a2)
26#endif
27#ifndef QT_ANNOTATE_FUNCTION
28# define QT_ANNOTATE_FUNCTION(x)
29#endif
30#ifndef QT_ANNOTATE_ACCESS_SPECIFIER
31# define QT_ANNOTATE_ACCESS_SPECIFIER(x)
32#endif
33
34// The following macros are our "extensions" to C++
35// They are used, strictly speaking, only by the moc.
36
37#ifndef Q_MOC_RUN
38#ifndef QT_NO_META_MACROS
39# if defined(QT_NO_KEYWORDS)
40# define QT_NO_EMIT
41# else
42# ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS
43# define slots Q_SLOTS
44# define signals Q_SIGNALS
45# endif
46# endif
47# define Q_SLOTS QT_ANNOTATE_ACCESS_SPECIFIER(qt_slot)
48# define Q_SIGNALS public QT_ANNOTATE_ACCESS_SPECIFIER(qt_signal)
49# define Q_PRIVATE_SLOT(d, signature) QT_ANNOTATE_CLASS2(qt_private_slot, d, signature)
50# define Q_EMIT
51#ifndef QT_NO_EMIT
52# define emit
53#endif
54#ifndef Q_CLASSINFO
55# define Q_CLASSINFO(name, value)
56#endif
57#define Q_PLUGIN_METADATA(x) QT_ANNOTATE_CLASS(qt_plugin_metadata, x)
58#define Q_INTERFACES(x) QT_ANNOTATE_CLASS(qt_interfaces, x)
59#define Q_PROPERTY(...) QT_ANNOTATE_CLASS(qt_property, __VA_ARGS__)
60#define Q_PRIVATE_PROPERTY(d, text) QT_ANNOTATE_CLASS2(qt_private_property, d, text)
61#ifndef Q_REVISION
62# define Q_REVISION(...)
63#endif
64#define Q_OVERRIDE(text) QT_ANNOTATE_CLASS(qt_override, text)
65#define QDOC_PROPERTY(text) QT_ANNOTATE_CLASS(qt_qdoc_property, text)
66#define Q_ENUMS(x) QT_ANNOTATE_CLASS(qt_enums, x)
67#define Q_FLAGS(x) QT_ANNOTATE_CLASS(qt_enums, x)
68#define Q_ENUM_IMPL(ENUM)
69 friend constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; }
70 friend constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; }
71#define Q_ENUM(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_IMPL(x)
72#define Q_FLAG(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_IMPL(x)
73#define Q_ENUM_NS_IMPL(ENUM)
74 inline constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; }
75 inline constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; }
76#define Q_ENUM_NS(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_NS_IMPL(x)
77#define Q_FLAG_NS(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_NS_IMPL(x)
78#define Q_SCRIPTABLE QT_ANNOTATE_FUNCTION(qt_scriptable)
79#define Q_INVOKABLE QT_ANNOTATE_FUNCTION(qt_invokable)
80#define Q_SIGNAL QT_ANNOTATE_FUNCTION(qt_signal)
81#define Q_SLOT QT_ANNOTATE_FUNCTION(qt_slot)
82#define Q_MOC_INCLUDE(...) QT_ANNOTATE_CLASS(qt_moc_include, __VA_ARGS__)
83#endif // !QT_NO_META_MACROS
84
85#ifndef QT_NO_TRANSLATION
86// full set of tr functions
87# define QT_TR_FUNCTIONS
88 static inline QString tr(const char *s, const char *c = nullptr, int n = -1)
89 { return staticMetaObject.tr(s, c, n); }
90#else
91// inherit the ones from QObject
92# define QT_TR_FUNCTIONS
93#endif
94
95#ifdef Q_QDOC
96#define QT_TR_FUNCTIONS
97#endif
98
99#if defined(Q_CC_CLANG)
100# if Q_CC_CLANG >= 1100
101# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") QT_WARNING_DISABLE_CLANG("-Wsuggest-override")
102# elif Q_CC_CLANG >= 306
103# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override")
104# endif
105#elif defined(Q_CC_GNU) && Q_CC_GNU >= 501
106# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_GCC("-Wsuggest-override")
107#elif defined(Q_CC_MSVC)
108# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_MSVC(26433)
109#else
110# define Q_OBJECT_NO_OVERRIDE_WARNING
111#endif
112
113#if defined(Q_CC_GNU) && Q_CC_GNU >= 600
114# define Q_OBJECT_NO_ATTRIBUTES_WARNING QT_WARNING_DISABLE_GCC("-Wattributes")
115#else
116# define Q_OBJECT_NO_ATTRIBUTES_WARNING
117#endif
118
119#define QT_META_OBJECT_VARS
120 template <typename> static constexpr auto qt_create_metaobjectdata();
121 template <typename MetaObjectTagType> static constexpr inline auto
122 qt_staticMetaObjectContent = qt_create_metaobjectdata<MetaObjectTagType>();
123 template <typename MetaObjectTagType> static constexpr inline auto
124 qt_staticMetaObjectStaticContent = qt_staticMetaObjectContent<MetaObjectTagType>.staticData;
125 template <typename MetaObjectTagType> static constexpr inline auto
126 qt_staticMetaObjectRelocatingContent = qt_staticMetaObjectContent<MetaObjectTagType>.relocatingData;
127
128#define QT_OBJECT_GADGET_COMMON
131 Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
132
133/* qmake ignore Q_OBJECT */
134#define Q_OBJECT public
135 :
136 QT_WARNING_PUSH
138 static const QMetaObject staticMetaObject;
139 virtual const QMetaObject *metaObject() const;
140 virtual void *qt_metacast(const char *);
141 virtual int qt_metacall(QMetaObject::Call, int, void **);
142 QT_TR_FUNCTIONS private
143 :
145 QT_DEFINE_TAG_STRUCT(QPrivateSignal);
146 QT_WARNING_POP
147 QT_ANNOTATE_CLASS(qt_qobject, "")
148
149/* qmake ignore Q_OBJECT */
150#define Q_OBJECT_FAKE Q_OBJECT QT_ANNOTATE_CLASS(qt_fake, "")
151
152#ifndef QT_NO_META_MACROS
153/* qmake ignore Q_GADGET_EXPORT */
154#define Q_GADGET_EXPORT(...) public
155 :
156 static __VA_ARGS__ const QMetaObject staticMetaObject;
157 void qt_check_for_QGADGET_macro();
158 typedef void QtGadgetHelper; private
159 :
160 QT_WARNING_PUSH
162 QT_WARNING_POP
163 QT_ANNOTATE_CLASS(qt_qgadget, "")
164 /*end*/
165
166/* qmake ignore Q_GADGET */
167#define Q_GADGET Q_GADGET_EXPORT()
168
169 /* qmake ignore Q_NAMESPACE_EXPORT */
170#define Q_NAMESPACE_EXPORT(...)
171 extern __VA_ARGS__ const QMetaObject staticMetaObject;
172 template <typename> static constexpr auto qt_create_metaobjectdata();
173 QT_ANNOTATE_CLASS(qt_qnamespace, "")
174 /*end*/
175
176/* qmake ignore Q_NAMESPACE */
177#define Q_NAMESPACE Q_NAMESPACE_EXPORT()
178 /*end*/
179
180#endif // !QT_NO_META_MACROS
181
182#else // Q_MOC_RUN
183#define slots slots
184#define signals signals
185#define Q_SLOTS Q_SLOTS
186#define Q_SIGNALS Q_SIGNALS
187#define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value)
188#define Q_INTERFACES(x) Q_INTERFACES(x)
189#define Q_PROPERTY(text) Q_PROPERTY(text)
190#define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text)
191#define Q_REVISION(...) Q_REVISION(__VA_ARGS__)
192#define Q_OVERRIDE(text) Q_OVERRIDE(text)
193#define Q_ENUMS(x) Q_ENUMS(x)
194#define Q_FLAGS(x) Q_FLAGS(x)
195#define Q_ENUM(x) Q_ENUM(x)
196#define Q_FLAG(x) Q_FLAG(x)
197#define Q_ENUM_NS(x) Q_ENUM_NS(x)
198#define Q_FLAG_NS(x) Q_FLAG_NS(x)
199 /* qmake ignore Q_OBJECT */
200#define Q_OBJECT Q_OBJECT
201 /* qmake ignore Q_OBJECT */
202#define Q_OBJECT_FAKE Q_OBJECT_FAKE
203 /* qmake ignore Q_GADGET */
204#define Q_GADGET Q_GADGET
205#define Q_SCRIPTABLE Q_SCRIPTABLE
206#define Q_INVOKABLE Q_INVOKABLE
207#define Q_SIGNAL Q_SIGNAL
208#define Q_SLOT Q_SLOT
209#endif //Q_MOC_RUN
210
212
213#endif // QTMETAMACROS_H
\inmodule QtSql
#define QT_ANNOTATE_FUNCTION(x)
#define QT_ANNOTATE_CLASS2(type, a1, a2)
#define Q_GADGET_EXPORT(...)
#define Q_OBJECT
#define QT_ANNOTATE_CLASS(type,...)
#define Q_OBJECT_NO_ATTRIBUTES_WARNING
#define QT_META_OBJECT_VARS
#define QT_TR_FUNCTIONS
#define QT_ANNOTATE_ACCESS_SPECIFIER(x)
#define QT_OBJECT_GADGET_COMMON
#define Q_SLOTS
#define Q_OBJECT_NO_OVERRIDE_WARNING
#define Q_SIGNALS
#define Q_ENUM_IMPL(ENUM)
#define Q_ENUM_NS_IMPL(ENUM)
#define Q_NAMESPACE_EXPORT(...)