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#include <QtCore/qtdeprecationmarkers.h>
12
14
15#ifndef Q_MOC_OUTPUT_REVISION
16// This number should be in sync with moc's outputrevision.h
17#define Q_MOC_OUTPUT_REVISION 69
18#endif
19
20// The following macros can be defined by tools that understand Qt
21// to have the information from the macro.
22#ifndef QT_ANNOTATE_CLASS
23# define QT_ANNOTATE_CLASS(type, ...)
24#endif
25#ifndef QT_ANNOTATE_CLASS2
26# define QT_ANNOTATE_CLASS2(type, a1, a2)
27#endif
28#ifndef QT_ANNOTATE_FUNCTION
29# define QT_ANNOTATE_FUNCTION(x)
30#endif
31#ifndef QT_ANNOTATE_ACCESS_SPECIFIER
32# define QT_ANNOTATE_ACCESS_SPECIFIER(x)
33#endif
34
35// The following macros are our "extensions" to C++
36// They are used, strictly speaking, only by the moc.
37
38#ifndef Q_MOC_RUN
39#ifndef QT_NO_META_MACROS
40# if defined(QT_NO_KEYWORDS)
41# define QT_NO_EMIT
42# else
43# ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS
44# define slots Q_SLOTS
45# define signals Q_SIGNALS
46# endif
47# endif
48# define Q_SLOTS QT_ANNOTATE_ACCESS_SPECIFIER(qt_slot)
49# define Q_SIGNALS public QT_ANNOTATE_ACCESS_SPECIFIER(qt_signal)
50# define Q_PRIVATE_SLOT(d, signature) QT_ANNOTATE_CLASS2(qt_private_slot, d, signature)
51# define Q_EMIT
52#ifndef QT_NO_EMIT
53# define emit
54#endif
55#ifndef Q_CLASSINFO
56# define Q_CLASSINFO(name, value)
57#endif
58#define Q_PLUGIN_METADATA(x) QT_ANNOTATE_CLASS(qt_plugin_metadata, x)
59#define Q_INTERFACES(x) QT_ANNOTATE_CLASS(qt_interfaces, x)
60#define Q_PROPERTY(...) QT_ANNOTATE_CLASS(qt_property, __VA_ARGS__)
61#define Q_PRIVATE_PROPERTY(d, text) QT_ANNOTATE_CLASS2(qt_private_property, d, text)
62#ifndef Q_REVISION
63# define Q_REVISION(...)
64#endif
65#define Q_OVERRIDE(text) QT_ANNOTATE_CLASS(qt_override, text)
66#define QDOC_PROPERTY(text) QT_ANNOTATE_CLASS(qt_qdoc_property, text)
67#if QT_DEPRECATED_SINCE(6, 12)
68#define Q_ENUMS(x) QT_ANNOTATE_CLASS(qt_enums, x)
69QT_DEPRECATED_MACRO_6_12(Q_ENUMS, "Use Q_ENUM instead.")
70#define Q_FLAGS(x) QT_ANNOTATE_CLASS(qt_enums, x)
71QT_DEPRECATED_MACRO_6_12(Q_FLAGS, "Use Q_FLAG instead.")
72#endif // QT_DEPRECATED_SINCE(6, 12)
73#define Q_ENUM_IMPL(ENUM)
74 friend constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; }
75 friend constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; }
76#define Q_ENUM(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_IMPL(x)
77#define Q_FLAG(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_IMPL(x)
78#define Q_ENUM_NS_IMPL(ENUM)
79 inline constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; }
80 inline constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; }
81#define Q_ENUM_NS(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_NS_IMPL(x)
82#define Q_FLAG_NS(x) QT_ANNOTATE_CLASS(qt_enums, x) Q_ENUM_NS_IMPL(x)
83#define Q_SCRIPTABLE QT_ANNOTATE_FUNCTION(qt_scriptable)
84#define Q_INVOKABLE QT_ANNOTATE_FUNCTION(qt_invokable)
85#define Q_SIGNAL QT_ANNOTATE_FUNCTION(qt_signal)
86#define Q_SLOT QT_ANNOTATE_FUNCTION(qt_slot)
87#define Q_MOC_INCLUDE(...) QT_ANNOTATE_CLASS(qt_moc_include, __VA_ARGS__)
88#endif // !QT_NO_META_MACROS
89
90#ifndef QT_NO_TRANSLATION
91// full set of tr functions
92# define QT_TR_FUNCTIONS
93 static inline QString tr(const char *s, const char *c = nullptr, int n = -1)
94 { return staticMetaObject.tr(s, c, n); }
95#else
96// inherit the ones from QObject
97# define QT_TR_FUNCTIONS
98#endif
99
100#ifdef Q_QDOC
101#define QT_TR_FUNCTIONS
102#endif
103
104#if defined(Q_CC_CLANG)
105# if Q_CC_CLANG >= 1100
106# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") QT_WARNING_DISABLE_CLANG("-Wsuggest-override")
107# elif Q_CC_CLANG >= 306
108# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override")
109# endif
110#elif defined(Q_CC_GNU) && Q_CC_GNU >= 501
111# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_GCC("-Wsuggest-override")
112#elif defined(Q_CC_MSVC)
113# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_MSVC(26433)
114#else
115# define Q_OBJECT_NO_OVERRIDE_WARNING
116#endif
117
118#if defined(Q_CC_GNU) && Q_CC_GNU >= 600
119# define Q_OBJECT_NO_ATTRIBUTES_WARNING QT_WARNING_DISABLE_GCC("-Wattributes")
120#else
121# define Q_OBJECT_NO_ATTRIBUTES_WARNING
122#endif
123
124#define QT_META_OBJECT_VARS
125 template <typename> static constexpr auto qt_create_metaobjectdata();
126 template <typename MetaObjectTagType> static constexpr inline auto
127 qt_staticMetaObjectContent = qt_create_metaobjectdata<MetaObjectTagType>();
128 template <typename MetaObjectTagType> static constexpr inline auto
129 qt_staticMetaObjectStaticContent = qt_staticMetaObjectContent<MetaObjectTagType>.staticData;
130 template <typename MetaObjectTagType> static constexpr inline auto
131 qt_staticMetaObjectRelocatingContent = qt_staticMetaObjectContent<MetaObjectTagType>.relocatingData;
132
133#define QT_OBJECT_GADGET_COMMON
136 Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
137
138/* qmake ignore Q_OBJECT */
139#define Q_OBJECT public
140 :
141 QT_WARNING_PUSH
143 static const QMetaObject staticMetaObject;
144 virtual const QMetaObject *metaObject() const;
145 virtual void *qt_metacast(const char *);
146 virtual int qt_metacall(QMetaObject::Call, int, void **);
147 QT_TR_FUNCTIONS private
148 :
150 QT_DEFINE_TAG_STRUCT(QPrivateSignal);
151 QT_WARNING_POP
152 QT_ANNOTATE_CLASS(qt_qobject, "")
153
154/* qmake ignore Q_OBJECT */
155#define Q_OBJECT_FAKE Q_OBJECT QT_ANNOTATE_CLASS(qt_fake, "")
156
157#ifndef QT_NO_META_MACROS
158/* qmake ignore Q_GADGET_EXPORT */
159#define Q_GADGET_EXPORT(...) public
160 :
161 static __VA_ARGS__ const QMetaObject staticMetaObject;
162 void qt_check_for_QGADGET_macro();
163 typedef void QtGadgetHelper; private
164 :
165 QT_WARNING_PUSH
167 QT_WARNING_POP
168 QT_ANNOTATE_CLASS(qt_qgadget, "")
169 /*end*/
170
171/* qmake ignore Q_GADGET */
172#define Q_GADGET Q_GADGET_EXPORT()
173
174 /* qmake ignore Q_NAMESPACE_EXPORT */
175#define Q_NAMESPACE_EXPORT(...)
176 extern __VA_ARGS__ const QMetaObject staticMetaObject;
177 template <typename> static constexpr auto qt_create_metaobjectdata();
178 QT_ANNOTATE_CLASS(qt_qnamespace, "")
179 /*end*/
180
181/* qmake ignore Q_NAMESPACE */
182#define Q_NAMESPACE Q_NAMESPACE_EXPORT()
183 /*end*/
184
185#endif // !QT_NO_META_MACROS
186
187#else // Q_MOC_RUN
188#define slots slots
189#define signals signals
190#define Q_SLOTS Q_SLOTS
191#define Q_SIGNALS Q_SIGNALS
192#define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value)
193#define Q_INTERFACES(x) Q_INTERFACES(x)
194#define Q_PROPERTY(text) Q_PROPERTY(text)
195#define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text)
196#define Q_REVISION(...) Q_REVISION(__VA_ARGS__)
197#define Q_OVERRIDE(text) Q_OVERRIDE(text)
198#define Q_ENUMS(x) Q_ENUMS(x)
199#define Q_FLAGS(x) Q_FLAGS(x)
200#define Q_ENUM(x) Q_ENUM(x)
201#define Q_FLAG(x) Q_FLAG(x)
202#define Q_ENUM_NS(x) Q_ENUM_NS(x)
203#define Q_FLAG_NS(x) Q_FLAG_NS(x)
204 /* qmake ignore Q_OBJECT */
205#define Q_OBJECT Q_OBJECT
206 /* qmake ignore Q_OBJECT */
207#define Q_OBJECT_FAKE Q_OBJECT_FAKE
208 /* qmake ignore Q_GADGET */
209#define Q_GADGET Q_GADGET
210#define Q_SCRIPTABLE Q_SCRIPTABLE
211#define Q_INVOKABLE Q_INVOKABLE
212#define Q_SIGNAL Q_SIGNAL
213#define Q_SLOT Q_SLOT
214#endif //Q_MOC_RUN
215
216QT_END_NAMESPACE
217
218#endif // QTMETAMACROS_H
Definition qlist.h:82
Combined button and popup list for selecting options.
#define QML_UNCREATABLE(REASON)
#define QML_PRIVATE_NAMESPACE
#define QML_NAMED_ELEMENT(NAME)
void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor, QList< int > *qmlTypeIds=nullptr)
Definition qqml.h:939
#define QML_FOREIGN(FOREIGN_TYPE)
#define QT_BEGIN_NAMESPACE
#define QT_END_NAMESPACE
#define QT_ANNOTATE_FUNCTION(x)
#define QT_ANNOTATE_CLASS2(type, a1, a2)
#define Q_PROPERTY(...)
#define Q_GADGET_EXPORT(...)
#define Q_OBJECT
#define Q_REVISION(...)
#define Q_CLASSINFO(name, value)
#define QT_ANNOTATE_CLASS(type,...)
#define Q_OBJECT_NO_ATTRIBUTES_WARNING
#define QT_META_OBJECT_VARS
#define Q_INTERFACES(x)
#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 signals
#define Q_SIGNALS
#define Q_ENUM_IMPL(ENUM)
#define Q_ENUM_NS_IMPL(ENUM)
#define emit
#define Q_NAMESPACE_EXPORT(...)