9#include <QtCore/qglobal.h>
10#include <QtCore/qatomic.h>
11#include <QtCore/qbytearray.h>
12#include <QtCore/qcompare.h>
13#include <QtCore/qdatastream.h>
14#include <QtCore/qfloat16.h>
15#include <QtCore/qhashfunctions.h>
16#include <QtCore/qiterable.h>
18#include <QtCore/qobjectdefs.h>
20#include <QtCore/qscopeguard.h>
29#include <QtCore/q20type_traits.h>
32#error qmetatype.h must be included before any header file that defines Bool
47#define QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(F)\
51 F(LongLong, 4, qlonglong) \
52 F(ULongLong, 5, qulonglong) \
53 F(Double, 6, double) \
57 F(Char16, 56, char16_t) \
58 F(Char32, 57, char32_t) \
60 F(UShort, 36, ushort) \
63 F(SChar, 40, signed char) \
64 F(Nullptr, 51, std::nullptr_t) \
65 F(QCborSimpleType, 52, QCborSimpleType) \
67#define QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(F) \
68 QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(F) \
71#define QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(F) \
72 F(VoidStar, 31, void*) \
74#if QT_CONFIG(easingcurve)
75#define QT_FOR_EACH_STATIC_EASINGCURVE(F)\
76 F(QEasingCurve, 29, QEasingCurve)
78#define QT_FOR_EACH_STATIC_EASINGCURVE(F)
81#if QT_CONFIG(itemmodel)
82#define QT_FOR_EACH_STATIC_ITEMMODEL_CLASS(F)\
83 F(QModelIndex, 42, QModelIndex) \
84 F(QPersistentModelIndex, 50, QPersistentModelIndex)
86#define QT_FOR_EACH_STATIC_ITEMMODEL_CLASS(F)
89#if QT_CONFIG(regularexpression)
90# define QT_FOR_EACH_STATIC_REGULAR_EXPRESSION(F) \
91 F(QRegularExpression, 44, QRegularExpression)
93# define QT_FOR_EACH_STATIC_REGULAR_EXPRESSION(F)
96#define QT_FOR_EACH_STATIC_CORE_CLASS(F)\
98 F(QString, 10, QString) \
99 F(QByteArray, 12, QByteArray) \
100 F(QBitArray, 13, QBitArray) \
101 F(QDate, 14, QDate) \
102 F(QTime, 15, QTime) \
103 F(QDateTime, 16, QDateTime) \
105 F(QLocale, 18, QLocale) \
106 F(QRect, 19, QRect) \
107 F(QRectF, 20, QRectF) \
108 F(QSize, 21, QSize) \
109 F(QSizeF, 22, QSizeF) \
110 F(QLine, 23, QLine) \
111 F(QLineF, 24, QLineF) \
112 F(QPoint, 25, QPoint) \
113 F(QPointF, 26, QPointF) \
114 QT_FOR_EACH_STATIC_EASINGCURVE(F) \
115 F(QUuid, 30, QUuid) \
116 F(QVariant, 41, QVariant) \
117 QT_FOR_EACH_STATIC_REGULAR_EXPRESSION(F) \
118 F(QJsonValue, 45, QJsonValue) \
119 F(QJsonObject, 46, QJsonObject) \
120 F(QJsonArray, 47, QJsonArray) \
121 F(QJsonDocument, 48, QJsonDocument) \
122 F(QCborValue, 53, QCborValue) \
123 F(QCborArray, 54, QCborArray) \
124 F(QCborMap, 55, QCborMap) \
125 F(Float16, 63, qfloat16) \
126 QT_FOR_EACH_STATIC_ITEMMODEL_CLASS(F)
128#define QT_FOR_EACH_STATIC_CORE_POINTER(F)\
129 F(QObjectStar, 39, QObject*)
131#define QT_FOR_EACH_STATIC_CORE_TEMPLATE(F)\
132 F(QVariantMap, 8, QVariantMap) \
133 F(QVariantList, 9, QVariantList) \
134 F(QVariantHash, 28, QVariantHash) \
135 F(QVariantPair, 58, QVariantPair) \
136 F(QByteArrayList, 49, QByteArrayList) \
137 F(QStringList, 11, QStringList) \
139#if QT_CONFIG(shortcut)
140#define QT_FOR_EACH_STATIC_KEYSEQUENCE_CLASS(F)\
141 F(QKeySequence, 0x100b, QKeySequence)
143#define QT_FOR_EACH_STATIC_KEYSEQUENCE_CLASS(F)
146#define QT_FOR_EACH_STATIC_GUI_CLASS(F)\
147 F(QFont, 0x1000, QFont) \
148 F(QPixmap, 0x1001, QPixmap) \
149 F(QBrush, 0x1002, QBrush) \
150 F(QColor, 0x1003, QColor) \
151 F(QPalette, 0x1004, QPalette) \
152 F(QIcon, 0x1005, QIcon) \
153 F(QImage, 0x1006, QImage) \
154 F(QPolygon, 0x1007, QPolygon) \
155 F(QRegion, 0x1008, QRegion) \
156 F(QBitmap, 0x1009, QBitmap) \
157 F(QCursor, 0x100a, QCursor) \
158 QT_FOR_EACH_STATIC_KEYSEQUENCE_CLASS(F) \
159 F(QPen, 0x100c, QPen) \
160 F(QTextLength, 0x100d, QTextLength) \
161 F(QTextFormat, 0x100e, QTextFormat) \
162 F(QTransform, 0x1010, QTransform) \
163 F(QMatrix4x4, 0x1011, QMatrix4x4) \
164 F(QVector2D, 0x1012, QVector2D) \
165 F(QVector3D, 0x1013, QVector3D) \
166 F(QVector4D, 0x1014, QVector4D) \
167 F(QQuaternion, 0x1015, QQuaternion) \
168 F(QPolygonF, 0x1016, QPolygonF) \
169 F(QColorSpace, 0x1017, QColorSpace) \
172#define QT_FOR_EACH_STATIC_WIDGETS_CLASS(F)\
173 F(QSizePolicy, 0x2000, QSizePolicy) \
176#define QT_FOR_EACH_STATIC_ALIAS_TYPE(F)\
177 F(ULong, -1, ulong, "unsigned long") \
178 F(UInt, -1, uint, "unsigned int") \
179 F(UShort, -1, ushort, "unsigned short") \
180 F(UChar, -1, uchar, "unsigned char") \
181 F(LongLong, -1, qlonglong, "long long") \
182 F(ULongLong, -1, qulonglong, "unsigned long long") \
183 F(SChar, -1, signed char, "qint8") \
184 F(UChar, -1, uchar, "quint8") \
185 F(Short, -1, short, "qint16") \
186 F(UShort, -1, ushort, "quint16") \
187 F(Int, -1, int, "qint32") \
188 F(UInt, -1, uint, "quint32") \
189 F(LongLong, -1, qlonglong, "qint64") \
190 F(ULongLong, -1, qulonglong, "quint64") \
191 F(QVariantList, -1, QVariantList, "QList<QVariant>") \
192 F(QVariantMap, -1, QVariantMap, "QMap<QString,QVariant>") \
193 F(QVariantHash, -1, QVariantHash, "QHash<QString,QVariant>") \
194 F(QVariantPair, -1, QVariantPair, "QPair<QVariant,QVariant>") \
195 F(QByteArrayList, -1, QByteArrayList, "QList<QByteArray>") \
196 F(QStringList, -1, QStringList, "QList<QString>") \
198#define QT_FOR_EACH_STATIC_TYPE(F)\
199 QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(F)\
200 QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(F)\
201 QT_FOR_EACH_STATIC_CORE_CLASS(F)\
202 QT_FOR_EACH_STATIC_CORE_POINTER(F)\
203 QT_FOR_EACH_STATIC_CORE_TEMPLATE(F)\
204 QT_FOR_EACH_STATIC_GUI_CLASS(F)\
205 QT_FOR_EACH_STATIC_WIDGETS_CLASS(F)\
207#define QT_DEFINE_METATYPE_ID(TypeName, Id, Name) \
210#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_1ARG(F) \
217#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_2ARG(F) \
221#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(F) \
232class QMetaTypeInterface;
238#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED) || !defined(Q_CC_MSVC)
242# define QMTI_MUTABLE mutable
295template<
typename From,
typename To>
301 template<
typename T,
bool>
302 struct SequentialValueTypeIsMetaType;
303 template<
typename T,
bool>
305 template<
typename T,
bool>
307 template<
typename,
typename>
313 template<
typename Enum>
328 FirstCoreType = Bool,
334 HighestInternalId = LastWidgetsType,
344 UnknownType = 0, Bool = 1,
Int = 2, UInt = 3, LongLong = 4, ULongLong = 5,
345 Double = 6,
Long = 32, Short = 33,
Char = 34, ULong = 35, UShort = 36,
346 UChar = 37,
Float = 38,
360 Char16 = 56, Char32 = 57,
361 Int128 = 59, UInt128 = 60, Float128 = 61, BFloat16 = 62,
Float16 = 63,
379 NeedsConstruction = 0x1,
380 NeedsDestruction = 0x2,
381 RelocatableType = 0x4,
382#if QT_DEPRECATED_SINCE(6, 0)
385 PointerToQObject = 0x8,
386 IsEnumeration = 0x10,
387 SharedPointerToQObject = 0x20,
388 WeakPointerToQObject = 0x40,
389 TrackingPointerToQObject = 0x80,
390 IsUnsignedEnumeration = 0x100,
392 PointerToGadget = 0x400,
397 NeedsCopyConstruction = 0x4000,
398 NeedsMoveConstruction = 0x8000,
404#if QT_DEPRECATED_SINCE(6, 0)
415 static int sizeOf(
int type)
418 static TypeFlags typeFlags(
int type)
427 static void destroy(
int type,
void *
data)
436 static bool isRegistered(
int type);
442 bool isValid()
const;
443 bool isRegistered()
const;
449#if QT_CORE_REMOVED_SINCE(6, 1) || defined(Q_QDOC)
454 int id(
int = 0)
const
457 return registerHelper();
462 constexpr TypeFlags
flags()
const;
464 constexpr const char *
name()
const;
466 void *
create(
const void *
copy =
nullptr)
const;
467 void destroy(
void *
data)
const;
468 void *construct(
void *where,
const void *
copy =
nullptr)
const;
469 void destruct(
void *
data)
const;
471 bool equals(
const void *lhs,
const void *rhs)
const;
477 bool isEqualityComparable()
const;
478 bool isOrdered()
const;
480#ifndef QT_NO_DATASTREAM
483 bool hasRegisteredDataStreamOperators()
const;
485#if QT_DEPRECATED_SINCE(6, 0)
503 if (
a.d_ptr ==
b.d_ptr)
505 if (!
a.d_ptr || !
b.d_ptr)
508 const int aId =
a.id();
509 const int bId =
b.id();
514#ifndef QT_NO_DEBUG_STREAM
518 bool debugStream(
QDebug& dbg,
const void *rhs);
519 bool hasRegisteredDebugStreamOperator()
const;
521#if QT_DEPRECATED_SINCE(6, 0)
523 static bool debugStream(
QDebug& dbg,
const void *rhs,
int typeId)
527 static bool hasRegisteredDebugStreamOperator()
528 {
return QMetaType::fromType<T>().hasRegisteredDebugStreamOperator(); }
530 static bool hasRegisteredDebugStreamOperator(
int typeId)
542 template<
typename From,
typename To>
545 return registerConverter<From, To>(QtPrivate::convertImplicit<From, To>);
549 template<
typename From,
typename To>
553 "QMetaType::registerConverter: At least one of the types must be a custom type.");
555 const QMetaType fromType = QMetaType::fromType<From>();
556 const QMetaType toType = QMetaType::fromType<To>();
557 auto converter = [
function](
const void *from,
void *to) ->
bool {
558 const From *
f =
static_cast<const From *
>(from);
559 To *
t =
static_cast<To *
>(to);
563 return registerConverterImpl<From, To>(converter, fromType, toType);
567 template<
typename From,
typename To>
571 "QMetaType::registerMutableView: At least one of the types must be a custom type.");
573 const QMetaType fromType = QMetaType::fromType<From>();
574 const QMetaType toType = QMetaType::fromType<To>();
576 From *
f =
static_cast<From *
>(from);
577 To *
t =
static_cast<To *
>(to);
581 return registerMutableViewImpl<From, To>(
view, fromType, toType);
585 template<
typename From,
typename To>
589 "QMetaType::registerConverter: At least one of the types must be a custom type.");
591 const QMetaType fromType = QMetaType::fromType<From>();
592 const QMetaType toType = QMetaType::fromType<To>();
593 auto converter = [
function](
const void *from,
void *to) ->
bool {
594 const From *
f =
static_cast<const From *
>(from);
595 To *
t =
static_cast<To *
>(to);
602 return registerConverterImpl<From, To>(converter, fromType, toType);
606 template<
typename From,
typename To,
typename UnaryFunction>
610 "QMetaType::registerConverter: At least one of the types must be a custom type.");
612 const QMetaType fromType = QMetaType::fromType<From>();
613 const QMetaType toType = QMetaType::fromType<To>();
614 auto converter = [
function = std::move(
function)](
const void *from,
void *to) ->
bool {
615 const From *
f =
static_cast<const From *
>(from);
616 To *
t =
static_cast<To *
>(to);
621 *
t = *std::forward<decltype(r)>(
r);
623 *
t = std::forward<decltype(r)>(
r);
627 return registerConverterImpl<From, To>(std::move(converter), fromType, toType);
631 template<
typename From,
typename To,
typename UnaryFunction>
635 "QMetaType::registerMutableView: At least one of the types must be a custom type.");
637 const QMetaType fromType = QMetaType::fromType<From>();
638 const QMetaType toType = QMetaType::fromType<To>();
640 From *
f =
static_cast<From *
>(from);
641 To *
t =
static_cast<To *
>(to);
645 return registerMutableViewImpl<From, To>(std::move(
view), fromType, toType);
649 template<
typename From,
typename To>
650 static bool registerConverterImpl(ConverterFunction converter,
QMetaType fromType,
QMetaType toType)
652 if (registerConverterFunction(std::move(converter), fromType, toType)) {
654 unregisterConverterFunction(fromType, toType);
662 template<
typename From,
typename To>
665 if (registerMutableViewFunction(std::move(
view), fromType, toType)) {
667 unregisterMutableViewFunction(fromType, toType);
681#if QT_DEPRECATED_SINCE(6, 0)
683 static bool convert(
const void *from,
int fromTypeId,
void *to,
int toTypeId)
686 static bool compare(
const void *lhs,
const void *rhs,
int typeId,
int *
result)
689 auto c =
t.compare(lhs, rhs);
705 static bool equals(
const void *lhs,
const void *rhs,
int typeId,
int *
result)
708 if (!
t.isEqualityComparable())
710 *
result =
t.equals(lhs, rhs) ? 0 : -1;
715 template<
typename From,
typename To>
718 return hasRegisteredConverterFunction(
719 QMetaType::fromType<From>(), QMetaType::fromType<To>());
724 template<
typename From,
typename To>
727 return hasRegisteredMutableViewFunction(
728 QMetaType::fromType<From>(), QMetaType::fromType<To>());
747#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
758#if QT_CORE_REMOVED_SINCE(6, 5)
759 int idHelper()
const;
762 int registerHelper()
const
766 if (
int id = d_ptr->typeId.loadRelaxed())
768 return registerHelper(d_ptr);
779#undef QT_DEFINE_METATYPE_ID
783#define QT_METATYPE_PRIVATE_DECLARE_TYPEINFO(C, F) \
785 Q_DECLARE_TYPEINFO(QtMetaTypePrivate:: C, (F)); \
786 namespace QtMetaTypePrivate {
798 typedef void (*getFunc)(
const void *
const *
p,
void *);
805 { *
static_cast<typename T::first_type *
>(dataPtr) =
static_cast<const T*
>(*pair)->first; }
808 { *
static_cast<typename T::second_type *
>(dataPtr) =
static_cast<const T*
>(*pair)->second; }
813 , _metaType_first(
QMetaType::fromType<typename T::first_type>())
814 , _metaType_second(
QMetaType::fromType<typename T::second_type>())
815 , _getFirst(getFirstImpl<T>)
816 , _getSecond(getSecondImpl<T>)
827 inline void first(
void *dataPtr)
const { _getFirst(&_pair, dataPtr); }
828 inline void second(
void *dataPtr)
const { _getSecond(&_pair, dataPtr); }
832template<
typename From>
835template<
typename T,
typename U>
848#define QT_FORWARD_DECLARE_SHARED_POINTER_TYPES_ITER(Name) \
849 template <class T> class Name; \
856 template<
typename T,
typename ODR_VIOLATION_PREVENTER>
860 static auto check(U *) -> std::integral_constant<bool,
sizeof(U) != 0>;
861 static auto check(...) -> std::false_type;
862 using type =
decltype(check(
static_cast<T *
>(
nullptr)));
866 template <
typename T,
typename ODR_VIOLATION_PREVENTER>
874 std::disjunction<std::is_member_pointer<T>,
875 std::is_function<std::remove_pointer_t<T>>>
886 enum { Value =
false };
893 enum { Value =
false };
898 enum { Value =
false };
903 enum { Value =
true };
917 enum { Value =
sizeof(checkType(
static_cast<T*
>(
nullptr))) ==
sizeof(
yes_type) };
920 template<
typename T,
typename Enable =
void>
926 template <
typename X>
930 IsRealGadget =
sizeof(checkType(&T::qt_check_for_QGADGET_macro)) ==
sizeof(
void *),
931 IsGadgetOrDerivedFrom =
true
935 template <
typename T>
936 using IsRealGadget = std::bool_constant<IsGadgetHelper<T>::IsRealGadget>;
938 template<
typename T,
typename Enable =
void>
945 template <
typename X>
968 template<
typename T,
typename Enable =
void>
985 std::bool_constant<IsGadgetHelper<T>::IsGadgetOrDerivedFrom>,
986 std::is_base_of<QObject, T>
1002 template<
typename T>
1010 template<
typename T>
1013 enum { Value =
false };
1016 template<
typename T>
1021 template<
typename T>
1024 enum { Value =
false };
1027 template<
typename T>
1032 template<
typename T>
1035 enum { Value =
false };
1038 template<
typename T>
1041 enum { Value =
true };
1044 template<
typename T>
1047 enum { Value =
false };
1050 template<
typename T>
1053 enum { Value =
false };
1056 template<typename T, bool = QtPrivate::IsSequentialContainer<T>::Value>
1070 template<typename T, bool = QMetaTypeId2<typename T::value_type>::Defined>
1084 template<
typename T>
1089 template<typename T, bool = QtPrivate::IsAssociativeContainer<T>::Value>
1103 template<typename T, bool = QMetaTypeId2<typename T::key_type>::Defined>
1117 template<typename T, bool = QMetaTypeId2<typename T::mapped_type>::Defined>
1131 template<
typename T>
1136 template<typename T, bool = QMetaTypeId2<typename T::first_type>::Defined
1146 template<
typename T>
1149 inline static bool registerConverter();
1152 template<
typename T>
1160 template<
typename T,
typename U>
1163 template<
typename T>
1166 template<
typename T,
typename =
void>
1172#if QT_CONFIG(future)
1173 template<
typename T>
1174 struct MetaTypeQFutureHelper
1176 static bool registerConverter() {
return false; }
1184 "Meta Types must be fully defined");
1185 static_assert(!std::is_reference_v<T>,
1186 "Meta Types cannot be non-const references or rvalue references.");
1188 using Pointed = std::remove_pointer_t<T>;
1190 "Pointer Meta Types must either point to fully-defined types "
1191 "or be declared with Q_DECLARE_OPAQUE_POINTER(T *)");
1199template <
typename T,
int =
1211template <
typename T>
1216template <
typename T>
1224template <
typename T>
1227template <
typename T>
1231 enum { Defined =
false, IsBuiltIn =
false };
1236 template <typename T, bool Defined = QMetaTypeId2<T>::Defined>
1247 template <
typename Result,
typename... Args>
1250 template<
typename T>
1253 template<typename T, bool = std::is_enum<T>::value>
1255 template<
typename T>
1256 constexpr bool IsUnsignedEnum<T, true> = !std::is_signed_v<std::underlying_type_t<T>>;
1258 template<
typename T>
1280 template<
typename T,
bool defined>
1286 template<
typename SmartPo
inter>
1291 return p.operator->();
1297 template <
typename T>
1298 struct EnableInternalDataWrap;
1300 template<
typename T>
1310template <
typename T>
1313#ifndef QT_NO_QOBJECT
1315 "qRegisterNormalizedMetaType",
1316 "qRegisterNormalizedMetaType was called with a not normalized type name, "
1317 "please call qRegisterMetaType instead.");
1320 const QMetaType metaType = QMetaType::fromType<T>();
1321 const int id = metaType.
id();
1329#if QT_CONFIG(future)
1330 QtPrivate::MetaTypeQFutureHelper<T>::registerConverter();
1333 if (normalizedTypeName != metaType.
name())
1349template <
typename T>
1352 return qRegisterNormalizedMetaTypeImplementation<T>(normalizedTypeName);
1355#define QT_DECL_METATYPE_EXTERN_TAGGED(TYPE, TAG, EXPORT) \
1356 QT_BEGIN_NAMESPACE \
1357 EXPORT int qRegisterNormalizedMetaType_ ## TAG (const QByteArray &); \
1358 template <> inline int qRegisterNormalizedMetaType< TYPE >(const QByteArray &name) \
1359 { return qRegisterNormalizedMetaType_ ## TAG (name); } \
1361 Q_DECLARE_METATYPE(TYPE) \
1363#define QT_IMPL_METATYPE_EXTERN_TAGGED(TYPE, TAG) \
1364 int qRegisterNormalizedMetaType_ ## TAG (const QByteArray &name) \
1365 { return qRegisterNormalizedMetaTypeImplementation< TYPE >(name); } \
1367#define QT_DECL_METATYPE_EXTERN(TYPE, EXPORT) \
1368 QT_DECL_METATYPE_EXTERN_TAGGED(TYPE, TYPE, EXPORT)
1369#define QT_IMPL_METATYPE_EXTERN(TYPE) \
1370 QT_IMPL_METATYPE_EXTERN_TAGGED(TYPE, TYPE)
1372template <
typename T>
1380 return qRegisterNormalizedMetaType<T>(normalizedTypeName);
1383template <
typename T>
1392 return QMetaType::fromType<T>().id();
1396template <
typename T>
1399 int id = qMetaTypeId<T>();
1405 return meta.registerHelper();
1408#ifndef QT_NO_QOBJECT
1409template <
typename T>
1419 if (
const int id = metatype_id.loadAcquire())
1421 const char *
const cName = T::staticMetaObject.className();
1423 typeName.reserve(strlen(cName) + 1);
1424 typeName.append(cName).append(
'*');
1425 const int newId = qRegisterNormalizedMetaType<T *>(
typeName);
1426 metatype_id.storeRelease(newId);
1431template <
typename T>
1435 Defined = std::is_default_constructible<T>::value
1441 if (
const int id = metatype_id.loadAcquire())
1443 const char *
const cName = T::staticMetaObject.className();
1444 const int newId = qRegisterNormalizedMetaType<T>(cName);
1445 metatype_id.storeRelease(newId);
1450template <
typename T>
1460 if (
const int id = metatype_id.loadAcquire())
1462 const char *
const cName = T::staticMetaObject.className();
1464 typeName.reserve(strlen(cName) + 1);
1465 typeName.append(cName).append(
'*');
1466 const int newId = qRegisterNormalizedMetaType<T *>(
typeName);
1467 metatype_id.storeRelease(newId);
1472template <
typename T>
1482 if (
const int id = metatype_id.loadAcquire())
1484 const char *eName = qt_getEnumName(T());
1485 const char *cName = qt_getEnumMetaObject(T())->className();
1487 typeName.reserve(strlen(cName) + 2 + strlen(eName));
1488 typeName.append(cName).append(
"::").append(eName);
1489 const int newId = qRegisterNormalizedMetaType<T>(
typeName);
1490 metatype_id.storeRelease(newId);
1496#define Q_DECLARE_OPAQUE_POINTER(POINTER) \
1497 QT_BEGIN_NAMESPACE namespace QtPrivate { \
1498 template <> struct IsPointerDeclaredOpaque<POINTER> \
1499 : std::true_type {}; \
1500 } QT_END_NAMESPACE \
1504#define Q_DECLARE_METATYPE(TYPE) Q_DECLARE_METATYPE_IMPL(TYPE)
1505#define Q_DECLARE_METATYPE_IMPL(TYPE) \
1506 QT_BEGIN_NAMESPACE \
1508 struct QMetaTypeId< TYPE > \
1510 enum { Defined = 1 }; \
1511 static_assert(QtPrivate::checkTypeIsSuitableForMetaType<TYPE>()); \
1512 static int qt_metatype_id() \
1514 Q_CONSTINIT static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \
1515 if (const int id = metatype_id.loadAcquire()) \
1517 constexpr auto arr = QtPrivate::typenameHelper<TYPE>(); \
1518 auto name = arr.data(); \
1519 if (QByteArrayView(name) == (#TYPE)) { \
1520 const int id = qRegisterNormalizedMetaType<TYPE>(name); \
1521 metatype_id.storeRelease(id); \
1524 const int newId = qRegisterMetaType< TYPE >(#TYPE); \
1525 metatype_id.storeRelease(newId); \
1532#define Q_DECLARE_BUILTIN_METATYPE(TYPE, METATYPEID, NAME) \
1533 QT_BEGIN_NAMESPACE \
1534 template<> struct QMetaTypeId2<NAME> \
1536 using NameAsArrayType = std::array<char, sizeof(#NAME)>; \
1537 enum { Defined = 1, IsBuiltIn = true, MetaType = METATYPEID }; \
1538 static inline constexpr int qt_metatype_id() { return METATYPEID; } \
1539 static constexpr NameAsArrayType nameAsArray = { #NAME }; \
1543#define QT_FORWARD_DECLARE_STATIC_TYPES_ITER(TypeName, TypeId, Name) \
1550#undef QT_FORWARD_DECLARE_STATIC_TYPES_ITER
1552#define Q_DECLARE_METATYPE_TEMPLATE_1ARG(SINGLE_ARG_TEMPLATE) \
1554template <typename T> \
1555struct QMetaTypeId< SINGLE_ARG_TEMPLATE<T> > \
1558 Defined = QMetaTypeId2<T>::Defined \
1560 static int qt_metatype_id() \
1562 Q_CONSTINIT static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \
1563 if (const int id = metatype_id.loadRelaxed()) \
1565 const char *tName = QMetaType::fromType<T>().name(); \
1567 const size_t tNameLen = qstrlen(tName); \
1568 QByteArray typeName; \
1569 typeName.reserve(sizeof(#SINGLE_ARG_TEMPLATE) + 1 + tNameLen + 1 + 1); \
1570 typeName.append(#SINGLE_ARG_TEMPLATE, int(sizeof(#SINGLE_ARG_TEMPLATE)) - 1) \
1571 .append('<').append(tName, tNameLen); \
1572 typeName.append('>'); \
1573 const int newId = qRegisterNormalizedMetaType< SINGLE_ARG_TEMPLATE<T> >(typeName); \
1574 metatype_id.storeRelease(newId); \
1580#define Q_DECLARE_METATYPE_TEMPLATE_2ARG(DOUBLE_ARG_TEMPLATE) \
1582template<typename T, typename U> \
1583struct QMetaTypeId< DOUBLE_ARG_TEMPLATE<T, U> > \
1586 Defined = QMetaTypeId2<T>::Defined && QMetaTypeId2<U>::Defined \
1588 static int qt_metatype_id() \
1590 Q_CONSTINIT static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \
1591 if (const int id = metatype_id.loadAcquire()) \
1593 const char *tName = QMetaType::fromType<T>().name(); \
1594 const char *uName = QMetaType::fromType<U>().name(); \
1597 const size_t tNameLen = qstrlen(tName); \
1598 const size_t uNameLen = qstrlen(uName); \
1599 QByteArray typeName; \
1600 typeName.reserve(sizeof(#DOUBLE_ARG_TEMPLATE) + 1 + tNameLen + 1 + uNameLen + 1 + 1); \
1601 typeName.append(#DOUBLE_ARG_TEMPLATE, int(sizeof(#DOUBLE_ARG_TEMPLATE)) - 1) \
1602 .append('<').append(tName, tNameLen).append(',').append(uName, uNameLen); \
1603 typeName.append('>'); \
1604 const int newId = qRegisterNormalizedMetaType< DOUBLE_ARG_TEMPLATE<T, U> >(typeName); \
1605 metatype_id.storeRelease(newId); \
1613template<
typename T,
bool =
false>
1627#define Q_DECLARE_SMART_POINTER_METATYPE(SMART_POINTER) \
1629namespace QtPrivate { \
1630template<typename T> \
1631struct SharedPointerMetaTypeIdHelper<SMART_POINTER<T>, true> \
1636 static int qt_metatype_id() \
1638 Q_CONSTINIT static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \
1639 if (const int id = metatype_id.loadAcquire()) \
1641 const char * const cName = T::staticMetaObject.className(); \
1642 QByteArray typeName; \
1643 typeName.reserve(sizeof(#SMART_POINTER) + 1 + strlen(cName) + 1); \
1644 typeName.append(#SMART_POINTER, int(sizeof(#SMART_POINTER)) - 1) \
1645 .append('<').append(cName).append('>'); \
1646 const int newId = qRegisterNormalizedMetaType< SMART_POINTER<T> >(typeName); \
1647 metatype_id.storeRelease(newId); \
1651template<typename T> \
1652struct MetaTypeSmartPointerHelper<SMART_POINTER<T> , \
1653 typename std::enable_if<IsPointerToTypeDerivedFromQObject<T*>::Value && !std::is_const_v<T>>::type> \
1655 static bool registerConverter() \
1657 const QMetaType to = QMetaType(QMetaType::QObjectStar); \
1658 if (!QMetaType::hasRegisteredConverterFunction(QMetaType::fromType<SMART_POINTER<T>>(), to)) { \
1659 QtPrivate::QSmartPointerConvertFunctor<SMART_POINTER<T> > o; \
1660 return QMetaType::registerConverter<SMART_POINTER<T>, QObject*>(o); \
1666template <typename T> \
1667struct QMetaTypeId< SMART_POINTER<T> > \
1668 : QtPrivate::SharedPointerMetaTypeIdHelper< SMART_POINTER<T>, \
1669 QtPrivate::IsPointerToTypeDerivedFromQObject<T*>::Value> \
1674#define Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(SINGLE_ARG_TEMPLATE) \
1675 QT_BEGIN_NAMESPACE \
1676 namespace QtPrivate { \
1677 template<typename T> \
1678 struct IsSequentialContainer<SINGLE_ARG_TEMPLATE<T> > \
1680 enum { Value = true }; \
1684 Q_DECLARE_METATYPE_TEMPLATE_1ARG(SINGLE_ARG_TEMPLATE)
1686#define Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE_ITER(TEMPLATENAME) \
1687 Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(TEMPLATENAME)
1693#undef Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE_ITER
1698#define Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(TEMPLATENAME) \
1699 QT_BEGIN_NAMESPACE \
1700 namespace QtPrivate { \
1701 template<typename T, typename U> \
1702 struct IsAssociativeContainer<TEMPLATENAME<T, U> > \
1704 enum { Value = true }; \
1708 Q_DECLARE_METATYPE_TEMPLATE_2ARG(TEMPLATENAME)
1716#define Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER(TEMPLATENAME) \
1717 Q_DECLARE_SMART_POINTER_METATYPE(TEMPLATENAME)
1723#undef Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER
1732template <
typename T>
1735 const QMetaType to = QMetaType::fromType<QtMetaTypePrivate::QPairVariantInterfaceImpl>();
1738 return QMetaType::registerConverter<T, QtMetaTypePrivate::QPairVariantInterfaceImpl>(
o);
1745template<
typename From>
1754template<
typename From>
1768 const QMetaType to = QMetaType::fromType<QIterable<QMetaSequence>>();
1771 return QMetaType::registerConverter<T, QIterable<QMetaSequence>>(
o);
1778 const QMetaType to = QMetaType::fromType<QIterable<QMetaSequence>>();
1781 return QMetaType::registerMutableView<T, QIterable<QMetaSequence>>(
o);
1787template<
typename From>
1796template<
typename From>
1812 const QMetaType to = QMetaType::fromType<QIterable<QMetaAssociation>>();
1815 return QMetaType::registerConverter<T, QIterable<QMetaAssociation>>(
o);
1822 const QMetaType to = QMetaType::fromType<QIterable<QMetaAssociation>>();
1825 return QMetaType::registerMutableView<T, QIterable<QMetaAssociation>>(
o);
1840 return ((
s >=
'a' &&
s <=
'z') || (
s >=
'A' &&
s <=
'Z') || (
s >=
'0' &&
s <=
'9')
1843 static constexpr bool is_space(
char s) {
return (
s ==
' ' ||
s ==
'\t' ||
s ==
'\n'); }
1844 static constexpr bool is_number(
char s) {
return s >=
'0' &&
s <=
'9'; }
1845 static constexpr bool starts_with_token(
const char *
b,
const char *
e,
const char *
token,
1846 bool msvcKw =
false)
1863 static constexpr bool skipToken(
const char *&
x,
const char *
e,
const char *
token,
1864 bool msvcKw =
false)
1866 if (!starts_with_token(
x,
e,
token, msvcKw))
1874 static constexpr const char *skipString(
const char *
x,
const char *
e)
1878 while (
x !=
e && *
x != delim) {
1890 static constexpr const char *skipTemplate(
const char *
x,
const char *
e,
bool stopAtComa =
false)
1893 int templateDepth = 0;
1901 if (stopAtComa && !scopeDepth && !templateDepth)
1906 if (--templateDepth < 0)
1920 if (is_number(
x[-1]))
1924 x = skipString(
x,
e);
1940 constexpr void replaceLast(
char x)
1947 constexpr void appendStr(
const char *
x)
1953 constexpr void normalizeIntegerTypes(
const char *&
begin,
const char *
end)
1957 int numUnsigned = 0;
1962 if (skipToken(
begin,
end,
"long")) {
1966 if (skipToken(
begin,
end,
"int")) {
1970 if (skipToken(
begin,
end,
"short")) {
1974 if (skipToken(
begin,
end,
"unsigned")) {
1978 if (skipToken(
begin,
end,
"signed")) {
1982 if (skipToken(
begin,
end,
"char")) {
1987 if (skipToken(
begin,
end,
"__int64")) {
1996 if (numSigned && numChar)
1997 appendStr(
"signed ");
1998 else if (numUnsigned)
2004 else if (numLong == 1)
2006 else if (numLong == 2)
2007 appendStr(
"longlong");
2008 else if (numUnsigned || numSigned || numInt)
2012 constexpr void skipStructClassOrEnum(
const char *&
begin,
const char *
end)
2016 skipToken(
begin,
end,
"struct",
true) || skipToken(
begin,
end,
"class",
true)
2017 || skipToken(
begin,
end,
"enum",
true);
2020 constexpr void skipQtNamespace(
const char *&
begin,
const char *
end)
2023 const char *nsbeg =
begin;
2024 if (skipToken(nsbeg,
end,
QT_STRINGIFY(QT_NAMESPACE)) && nsbeg + 2 <
end && nsbeg[0] ==
':'
2025 && nsbeg[1] ==
':') {
2037#if defined(Q_CC_CLANG) || defined (Q_CC_GNU)
2041 constexpr int normalizeTypeFromSignature(
const char *
begin,
const char *
end)
2045#if defined (Q_CC_CLANG)
2046 if (
name.find(
"anonymous ") != std::string_view::npos)
2049 if (
name.find(
"unnamed ") != std::string_view::npos)
2052 if (*
begin ==
' ') {
2053 if (last ==
',' || last ==
'>' || last ==
'<' || last ==
'*' || last ==
'&') {
2060 replaceLast(*
begin);
2100 const char *cst =
begin + 1;
2103 bool seenStar =
false;
2104 bool hasMiddleConst =
false;
2106 if (*cst ==
'\"' || (*cst ==
'\'' && !is_number(cst[-1]))) {
2107 cst = skipString(cst,
end);
2114 if (*cst ==
'&' || *cst ==
'*' || *cst ==
'[') {
2115 seenStar = *cst !=
'&' || cst != (
end - 1);
2119 cst = skipTemplate(cst + 1,
end);
2124 const char *skipedCst = cst;
2126 const char *testEnd =
end;
2127 while (skipedCst < testEnd--) {
2128 if (*testEnd ==
'*' || *testEnd ==
'['
2129 || (*testEnd ==
'&' && testEnd != (
end - 1))) {
2133 if (*testEnd ==
'>')
2136 if (adjustConst && !seenStar) {
2137 if (*(
end - 1) ==
'&')
2140 appendStr(
"const ");
2144 hasMiddleConst =
true;
2148 if (skipToken(
begin,
end,
"const")) {
2149 if (adjustConst && !seenStar) {
2150 if (*(
end - 1) ==
'&')
2153 appendStr(
"const ");
2156 if (seenStar && adjustConst) {
2157 const char *
e =
end;
2158 if (*(
end - 1) ==
'&' && *(
end - 2) !=
'&')
2162 const char *
token =
"tsnoc";
2175 if (skipToken(
begin,
end,
"QVector")) {
2180 if (skipToken(
begin,
end,
"QPair")) {
2182 appendStr(
"std::pair");
2185 if (!hasMiddleConst)
2189 bool spaceSkiped =
true;
2194 }
else if ((
c ==
'\'' && !is_number(last)) ||
c ==
'\"') {
2203 spaceSkiped =
false;
2207 const char *tpl = skipTemplate(
begin,
end,
true);
2213 }
while (*
begin++ ==
',');
2232template <
typename T1_,
typename T2_>
2249 t1Name = typenameHelper<T1>();
2254 t2Name = typenameHelper<T2>();
2256 constexpr auto nonTypeDependentLen =
sizeof(
"std::pair<,>");
2257 constexpr auto t1Len = t1Name.size() - 1;
2258 constexpr auto t2Len = t2Name.size() - 1;
2259 constexpr auto length = nonTypeDependentLen + t1Len + t2Len;
2260 std::array<char, length + 1>
result {};
2261 constexpr auto prefix =
"std::pair<";
2262 int currentLength = 0;
2263 for (; currentLength < int(
sizeof(
"std::pair<") - 1); ++currentLength)
2264 result[currentLength] = prefix[currentLength];
2265 for (
int i = 0;
i < int(t1Len); ++currentLength, ++
i)
2266 result[currentLength] = t1Name[
i];
2267 result[currentLength++] =
',';
2268 for (
int i = 0;
i < int(t2Len); ++currentLength, ++
i)
2269 result[currentLength] = t2Name[
i];
2270 result[currentLength++] =
'>';
2271 result[currentLength++] =
'\0';
2274 constexpr auto prefix =
sizeof(
2278#if defined(Q_CC_MSVC) && defined(Q_CC_CLANG)
2279 "auto __cdecl QtPrivate::typenameHelper(void) [T = "
2280#elif defined(Q_CC_MSVC)
2281 "auto __cdecl QtPrivate::typenameHelper<"
2282#elif defined(Q_CC_CLANG)
2283 "auto QtPrivate::typenameHelper() [T = "
2284#elif defined(Q_CC_GHS)
2285 "auto QtPrivate::typenameHelper<T>()[with T="
2287 "constexpr auto QtPrivate::typenameHelper() [with T = "
2290#if defined(Q_CC_MSVC) && !defined(Q_CC_CLANG)
2291 constexpr int suffix =
sizeof(
">(void)");
2293 constexpr int suffix =
sizeof(
"]");
2296#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU_ONLY < 804
2304 constexpr const char *
begin =
func + prefix;
2308 std::array<char, len + 1>
result {};
2314template<
typename T,
typename =
void>
2320 : std::integral_constant<int, QMetaTypeId2<T>::MetaType>
2324template<
typename T,
bool = (QTypeTraits::has_operator_equal_v<T> && !std::is_po
inter_v<T>)>
2330 {
return *
reinterpret_cast<const T *
>(
a) == *
reinterpret_cast<const T *
>(
b); }
2340template<
typename T,
bool = (QTypeTraits::has_operator_less_than_v<T> && !std::is_po
inter_v<T>)>
2344 {
return *
reinterpret_cast<const T *
>(
a) < *
reinterpret_cast<const T *
>(
b); }
2353template<
typename T,
bool = (QTypeTraits::has_ostream_operator_v<QDebug, T> && !std::is_po
inter_v<T>)>
2357 { dbg << *reinterpret_cast<const T *>(
a); }
2366template<
typename T,
bool = QTypeTraits::has_stream_operator_v<QDataStream, T>>
2370 { ds << *reinterpret_cast<const T *>(
a); }
2372 { ds >> *
reinterpret_cast<T *
>(
a); }
2392#if !defined(Q_OS_WIN) && defined(Q_CC_CLANG)
2393# pragma GCC visibility push(hidden)
2400 static constexpr decltype(typenameHelper<S>())
name = typenameHelper<S>();
2414 if constexpr (std::is_copy_constructible_v<S> && !std::is_trivially_copy_constructible_v<S>) {
2416 new (
addr) S(*
reinterpret_cast<const S *
>(
other));
2425 if constexpr (std::is_move_constructible_v<S> && !std::is_trivially_move_constructible_v<S>) {
2427 new (
addr) S(std::move(*
reinterpret_cast<S *
>(
other)));
2436 if constexpr (std::is_destructible_v<S> && !std::is_trivially_destructible_v<S>)
2438 reinterpret_cast<S *
>(
addr)->~S();
2470 using InterfaceType = std::conditional_t<IsConstMetaTypeInterface, const QMetaTypeInterface, NonConstMetaTypeInterface>;
2473 QMetaTypeInterface::CurrentRevision,
2493#if !defined(Q_OS_WIN) && defined(Q_CC_CLANG)
2494# pragma GCC visibility pop
2533#if !defined(QT_BOOTSTRAPPED) && !defined(Q_CC_MSVC) && !defined(Q_OS_INTEGRITY)
2535#ifdef QT_NO_DATA_RELOCATION
2536# define QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER(TypeName, Id, Name) \
2537 extern template class Q_CORE_EXPORT QMetaTypeForType<Name>;
2539# define QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER(TypeName, Id, Name) \
2540 extern template class Q_CORE_EXPORT QMetaTypeForType<Name>; \
2541 extern template struct Q_CORE_EXPORT QMetaTypeInterfaceWrapper<Name>;
2549#undef QT_METATYPE_DECLARE_EXTERN_TEMPLATE_ITER
2555 using type = std::remove_pointer_t<T>;
2558#define Q_REMOVE_POINTER_LIKE_IMPL(Pointer) \
2559template <typename T> \
2560struct qRemovePointerLike<Pointer<T>> \
2568#undef Q_REMOVE_POINTER_LIKE_IMPL
2570template<
typename T,
typename ForceComplete_>
2585template<
typename Unique,
typename TypeCompletePair>
2588 using T =
typename TypeCompletePair::type;
2589 using ForceComplete =
typename TypeCompletePair::ForceComplete;
2593 if constexpr (std::is_void_v<Tz>) {
2596 }
else if constexpr (ForceComplete::value) {
2597 checkTypeIsSuitableForMetaType<Ty>();
2599 }
else if constexpr (std::is_reference_v<Tz>) {
2614 QtPrivate::checkTypeIsSuitableForMetaType<T>();
2615 return QMetaType(QtPrivate::qMetaTypeInterfaceForType<T>());
2620 return d_ptr ? d_ptr->size : 0;
2625 return d_ptr ? d_ptr->alignment : 0;
2630 return d_ptr ? TypeFlags(d_ptr->flags) : TypeFlags{};
2635 return d_ptr && d_ptr->metaObjectFn ? d_ptr->metaObjectFn(d_ptr) :
nullptr;
2638template<
typename... T>
2647 QtPrivate::qTryMetaTypeInterfaceForType<void, QtPrivate::TypeAndForceComplete<T, std::true_type>>()...
2652 return d_ptr ? d_ptr->name :
nullptr;
2655template<
typename Unique,
typename... T>
2657 QtPrivate::qTryMetaTypeInterfaceForType<Unique, T>()...
2670 QPairVariantInterfaceImpl, Q_CORE_EXPORT)
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
The QColorSpace class provides a color space abstraction.
The QColor class provides colors based on RGB, HSV or CMYK values.
The QCursor class provides a mouse cursor with an arbitrary shape.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore \reentrant
The QIcon class provides scalable icons in different modes and states.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
The QKeySequence class encapsulates a key sequence as used by shortcuts.
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
The QPalette class contains color groups for each widget state.
static const QPartialOrdering Less
static const QPartialOrdering Equivalent
static const QPartialOrdering Unordered
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
The QPolygonF class provides a list of points using floating point precision.
The QPolygon class provides a list of points using integer precision.
The QQuaternion class represents a quaternion consisting of a vector and scalar.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
The QRegion class specifies a clip region for a painter.
\inmodule QtCore \reentrant
The QSizePolicy class is a layout attribute describing horizontal and vertical resizing policy.
\macro QT_RESTRICTED_CAST_FROM_ASCII
\inmodule QtCore \reentrant
The QVector2D class represents a vector or vertex in 2D space.
The QVector3D class represents a vector or vertex in 3D space.
The QVector4D class represents a vector or vertex in 4D space.
list append(new Employee("Blackpool", "Stephen"))
bool isBuiltinType(const QByteArray &type)
static QByteArray normalizeType(const QByteArray &ba)
Combined button and popup list for selecting options.
bool canConvert(const QQmlPropertyCache *fromMo, const QQmlPropertyCache *toMo)
typename qRemovePointerLike< T >::type qRemovePointerLike_t
static constexpr bool checkTypeIsSuitableForMetaType()
constexpr auto typenameHelper()
constexpr bool IsQmlListType
constexpr bool IsUnsignedEnum
constexpr const QMetaTypeInterface * qTryMetaTypeInterfaceForType()
To convertImplicit(const From &from)
This template is used for implicit conversion from type From to type To.
std::bool_constant< IsGadgetHelper< T >::IsRealGadget > IsRealGadget
constexpr const QMetaTypeInterface * qMetaTypeInterfaceForType()
char qt_getEnumMetaObject(const T &)
std::remove_cv_t< std::remove_reference_t< T > > remove_cvref_t
static jboolean copy(JNIEnv *, jobject)
#define Q_BASIC_ATOMIC_INITIALIZER(a)
#define Q_DECL_ENUMERATOR_DEPRECATED_X(x)
#define Q_DECL_PURE_FUNCTION
#define QT_WARNING_DISABLE_FLOAT_COMPARE
QPair< QVariant, QVariant > QVariantPair
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
size_t qHash(const QFileSystemWatcherPathKey &key, size_t seed=0)
#define Q_DECLARE_FLAGS(Flags, Enum)
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLenum GLsizei length
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
#define Q_ASSERT_X(cond, x, msg)
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
QScopeGuard< typename std::decay< F >::type > qScopeGuard(F &&f)
[qScopeGuard]
#define QT_DEPRECATED_VERSION_6_0
static int compare(quint64 a, quint64 b)
QT_BEGIN_NAMESPACE typedef signed char qint8
static bool lessThan(const QChar *a, int l, const char *c)
QT_BEGIN_NAMESPACE typedef uchar * output
QT_END_NAMESPACE typedef QT_PREPEND_NAMESPACE(quintptr) WId
obj metaObject() -> className()
static T * internalData(const QWeakPointer< T > &p) noexcept
static void * checkType(void(T::*)())
static char checkType(void(X::*)())
static bool registerConverter()
static char checkType(void(X::*)())
static void * checkType(void(T::*)())
static no_type checkType(...)
static yes_type checkType(QObject *)
static yes_type checkType(const QObject *)
static const T & declval()
QIterable< QMetaAssociation > operator()(const From &f) const
QIterable< QMetaAssociation > operator()(From &f) const
static void dataStreamIn(const QMetaTypeInterface *, QDataStream &ds, void *a)
static void dataStreamOut(const QMetaTypeInterface *, QDataStream &ds, const void *a)
static void debugStream(const QMetaTypeInterface *, QDebug &dbg, const void *a)
QT_WARNING_PUSH static QT_WARNING_DISABLE_FLOAT_COMPARE bool equals(const QMetaTypeInterface *, const void *a, const void *b)
static bool lessThan(const QMetaTypeInterface *, const void *a, const void *b)
QIterable< QMetaSequence > operator()(const From &f) const
QIterable< QMetaSequence > operator()(From &f) const
QObject * operator()(const QWeakPointer< T > &p) const
QObject * operator()(const SmartPointer &p) const
constexpr int normalizeType(const char *begin, const char *end, bool adjustConst=true)
constexpr int normalizeTypeFromSignature(const char *begin, const char *end)
ForceComplete_ ForceComplete
static auto check(...) -> std::false_type
static auto check(U *) -> std::integral_constant< bool, sizeof(U) !=0 >
decltype(check(static_cast< T * >(nullptr))) type
std::remove_pointer_t< T > type