14#if QT_CONFIG(easingcurve)
18#if QT_CONFIG(regularexpression)
26#if QT_CONFIG(itemmodel)
29#ifndef QT_BOOTSTRAPPED
39#include "private/qlocale_p.h"
43#ifndef QT_NO_GEOM_VARIANT
64 switch (
d->typeInterface()->size) {
66 return d->get<
signed char>();
68 return d->get<
short>();
74 Q_UNREACHABLE_RETURN(0);
79 switch (
d->typeInterface()->typeId) {
81 case QMetaType::LongLong:
83 case QMetaType::SChar:
84 case QMetaType::Short:
86 return qMetaTypeNumberBySize(
d);
87 case QMetaType::Float:
89 case QMetaType::Double:
91#ifndef QT_BOOTSTRAPPED
92 case QMetaType::QJsonValue:
94 case QMetaType::QCborValue:
98 Q_UNREACHABLE_RETURN(0);
103 switch (
d->typeInterface()->size) {
105 return d->get<
unsigned char>();
107 return d->get<
unsigned short>();
109 return d->get<
unsigned int>();
113 Q_UNREACHABLE_RETURN(0);
116static std::optional<qlonglong> qConvertToNumber(
const QVariant::Private *
d,
bool allowStringToBool =
false)
119 switch (
d->typeInterface()->typeId) {
120 case QMetaType::QString: {
124 if (allowStringToBool) {
125 if (
s ==
"false"_L1 ||
s ==
"0"_L1)
127 if (
s ==
"true"_L1 ||
s ==
"1"_L1)
132 case QMetaType::QChar:
133 return d->get<
QChar>().unicode();
134 case QMetaType::QByteArray:
138 case QMetaType::Bool:
140#ifndef QT_BOOTSTRAPPED
141 case QMetaType::QCborValue:
144 return qMetaTypeNumber(
d);
145 case QMetaType::QJsonValue:
150 case QMetaType::Double:
152 case QMetaType::Char:
153 case QMetaType::SChar:
154 case QMetaType::Short:
155 case QMetaType::Long:
156 case QMetaType::Float:
157 case QMetaType::LongLong:
158 return qMetaTypeNumber(
d);
159 case QMetaType::ULongLong:
160 case QMetaType::UInt:
161 case QMetaType::UChar:
162 case QMetaType::Char16:
163 case QMetaType::Char32:
164 case QMetaType::UShort:
165 case QMetaType::ULong:
170 ||
d->typeInterface()->typeId == QMetaType::QCborSimpleType)
171 return qMetaTypeNumberBySize(
d);
179 switch (
d->typeInterface()->typeId) {
180 case QMetaType::QString:
184 case QMetaType::Double:
185 return d->get<
double>();
186 case QMetaType::Float:
187 return double(
d->get<
float>());
188 case QMetaType::Float16:
190 case QMetaType::ULongLong:
191 case QMetaType::UInt:
192 case QMetaType::UChar:
193 case QMetaType::Char16:
194 case QMetaType::Char32:
195 case QMetaType::UShort:
196 case QMetaType::ULong:
197 return double(qMetaTypeUNumber(
d));
198#ifndef QT_BOOTSTRAPPED
199 case QMetaType::QCborValue:
201 case QMetaType::QJsonValue:
206 if (std::optional<qlonglong> l = qConvertToNumber(
d))
215 if (!iface ||
iface->size == 0)
218 Q_ASSERT(!isInterfaceFor<void>(iface));
222 qWarning(
"QVariant: Provided metatype for '%s' does not support destruction and "
223 "copy construction",
iface->name);
229 qWarning(
"QVariant: Cannot create type '%s' without a default constructor",
iface->name);
236enum CustomConstructMoveOptions {
242enum CustomConstructNullabilityOption {
249template <CustomConstructMoveOptions moveOption = UseCopy, CustomConstructNullabilityOption nullability = MaybeNull>
251 std::conditional_t<moveOption == ForceMove, void *, const void *>
copy)
256 Q_ASSERT(!isInterfaceFor<void>(iface));
260 if constexpr (moveOption == ForceMove)
262 if constexpr (nullability == NonNull)
268 d->is_null = !
copy QT6_ONLY(|| isInterfaceFor<std::nullptr_t>(iface));
271 d->is_shared =
false;
274 if constexpr (moveOption == ForceMove && nullability == NonNull)
280 if constexpr (moveOption == ForceMove && nullability == NonNull)
281 moveConstruct(iface, where, copy);
283 construct(iface, where, copy);
306 d.data.shared->ref.ref();
543 :
d(clonePrivate(
p.
d))
620 auto typeFits = [&] {
621 auto newIface =
type.iface();
625 return newSize <= oldSize;
634 const auto ps =
d.
data.shared;
635 const auto align =
type.alignOf();
644 return const_cast<void *
>(
d.
storage());
946#ifndef QT_BOOTSTRAPPED
963#if QT_CONFIG(easingcurve)
966#ifndef QT_NO_GEOM_VARIANT
968 :
d(std::piecewise_construct_t{}, pt) {}
970 :
d(std::piecewise_construct_t{}, pt) {}
972 :
d(std::piecewise_construct_t{},
r) {}
974 :
d(std::piecewise_construct_t{},
r) {}
976 :
d(std::piecewise_construct_t{}, l) {}
978 :
d(std::piecewise_construct_t{}, l) {}
980 :
d(std::piecewise_construct_t{},
s) {}
982 :
d(std::piecewise_construct_t{},
s) {}
984#ifndef QT_BOOTSTRAPPED
988#if QT_CONFIG(regularexpression)
992#ifndef QT_BOOTSTRAPPED
994 :
d(std::piecewise_construct_t{}, jsonValue)
995{
static_assert(
sizeof(CborValueStandIn) ==
sizeof(
QJsonValue)); }
1000#if QT_CONFIG(itemmodel)
1002 :
d(std::piecewise_construct_t{}, modelIndex) {}
1097 if (!
d.
data.shared->ref.deref())
1151#ifndef QT_NO_DATASTREAM
1156 QMetaType::QVariantMap,
1157 QMetaType::QVariantList,
1159 QMetaType::QStringList,
1166 QMetaType::QPalette,
1176 QMetaType::QPolygon,
1180 QMetaType::QSizePolicy,
1183 QMetaType::QDateTime,
1184 QMetaType::QByteArray,
1185 QMetaType::QBitArray,
1186#if QT_CONFIG(shortcut)
1187 QMetaType::QKeySequence,
1192 QMetaType::LongLong,
1193 QMetaType::ULongLong,
1194#if QT_CONFIG(easingcurve)
1195 QMetaType::QEasingCurve
1223 if (
s.version() < QDataStream::Qt_4_0) {
1228 }
else if (
s.version() < QDataStream::Qt_5_0) {
1236 }
else if (
typeId == 75 ) {
1244 if (
s.version() < QDataStream::Qt_6_0) {
1251 typeId = QMetaType::QSizePolicy;
1257 qint8 is_null =
false;
1258 if (
s.version() >= QDataStream::Qt_4_2)
1265 s.setStatus(QDataStream::ReadCorruptData);
1266 qWarning(
"QVariant::load: unknown user type with name %s.",
name.constData());
1274 if (
s.version() < QDataStream::Qt_5_0) {
1286 s.setStatus(QDataStream::ReadCorruptData);
1300 bool saveAsUserType =
false;
1303 saveAsUserType =
true;
1305 if (
s.version() < QDataStream::Qt_6_0) {
1309 if (!strcmp(
d.
type().
name(),
"QRegExp")) {
1315 saveAsUserType =
true;
1320 saveAsUserType =
true;
1322 }
else if (
typeId == QMetaType::QSizePolicy) {
1326 if (
s.version() < QDataStream::Qt_4_0) {
1338 }
else if (
s.version() < QDataStream::Qt_5_0) {
1341 saveAsUserType =
true;
1354 saveAsUserType =
true;
1358 if (saveAsUserType) {
1359 if (
s.version() < QDataStream::Qt_6_0)
1365 if (
s.version() >= QDataStream::Qt_4_2)
1371 if (
s.version() < QDataStream::Qt_5_0)
1377 qWarning(
"QVariant::save: unable to save type '%s' (type id: %d).\n",
1379 Q_ASSERT_X(
false,
"QVariant::save",
"Invalid type to save");
1454 return qvariant_cast<QStringList>(*
this);
1474 return qvariant_cast<QString>(*
this);
1490 return qvariant_cast<QVariantMap>(*
this);
1501 return qvariant_cast<QVariantHash>(*
this);
1518 return qvariant_cast<QDate>(*
this);
1535 return qvariant_cast<QTime>(*
this);
1552 return qvariant_cast<QDateTime>(*
this);
1564#if QT_CONFIG(easingcurve)
1567 return qvariant_cast<QEasingCurve>(*
this);
1582 return qvariant_cast<QByteArray>(*
this);
1585#ifndef QT_NO_GEOM_VARIANT
1597 return qvariant_cast<QPoint>(*
this);
1610 return qvariant_cast<QRect>(*
this);
1623 return qvariant_cast<QSize>(*
this);
1636 return qvariant_cast<QSizeF>(*
this);
1650 return qvariant_cast<QRectF>(*
this);
1663 return qvariant_cast<QLineF>(*
this);
1676 return qvariant_cast<QLine>(*
this);
1690 return qvariant_cast<QPointF>(*
this);
1695#ifndef QT_BOOTSTRAPPED
1706 return qvariant_cast<QUrl>(*
this);
1720 return qvariant_cast<QLocale>(*
this);
1723#if QT_CONFIG(regularexpression)
1735 return qvariant_cast<QRegularExpression>(*
this);
1739#if QT_CONFIG(itemmodel)
1750 return qvariant_cast<QModelIndex>(*
this);
1763 return qvariant_cast<QPersistentModelIndex>(*
this);
1778 return qvariant_cast<QUuid>(*
this);
1781#ifndef QT_BOOTSTRAPPED
1792 return qvariant_cast<QJsonValue>(*
this);
1805 return qvariant_cast<QJsonObject>(*
this);
1818 return qvariant_cast<QJsonArray>(*
this);
1831 return qvariant_cast<QJsonDocument>(*
this);
1846 return qvariant_cast<QChar>(*
this);
1849#ifndef QT_BOOTSTRAPPED
1858 return qvariant_cast<QBitArray>(*
this);
1862template <
typename T>
1898 return qNumVariantToHelper<int>(
d,
ok);
1920 return qNumVariantToHelper<uint>(
d,
ok);
1937 return qNumVariantToHelper<qlonglong>(
d,
ok);
1954 return qNumVariantToHelper<qulonglong>(
d,
ok);
1971 auto boolType = QMetaType::fromType<bool>();
1972 if (
d.
type() == boolType)
1973 return d.
get<
bool>();
1994 return qNumVariantToHelper<double>(
d,
ok);
2013 return qNumVariantToHelper<float>(
d,
ok);
2032 return qNumVariantToHelper<qreal>(
d,
ok);
2048 return qvariant_cast<QVariantList>(*
this);
2118 if (
d.
type() == targetType)
2124 create(targetType,
nullptr);
2129 if (oldValue.
d.
is_null && oldValue.
d.
type().
id() != QMetaType::Nullptr)
2223 return tp < (CHAR_BIT *
sizeof numericTypeBits) ? numericTypeBits & (
Q_UINT64_C(1) << tp) :
false;
2228 return tp == QMetaType::Double || tp == QMetaType::Float || tp == QMetaType::Float16;
2234 if (!iface1 || !iface2)
2243 if (isNumeric1 && isNumeric2)
2252 if (isEnum1 && isEnum2)
2256 if (isEnum1 && isNumeric2)
2258 if (isNumeric1 && isEnum2)
2272 uint t1 = iface1->typeId;
2273 uint t2 = iface2->typeId;
2275 if ((
t1 == QMetaType::Bool &&
t2 == QMetaType::QString) ||
2276 (
t2 == QMetaType::Bool &&
t1 == QMetaType::QString))
2277 return QMetaType::Bool;
2297 auto isUnsigned = [](
uint tp) {
2299 return tp == QMetaType::ULongLong || tp == QMetaType::ULong ||
2300 tp == QMetaType::UInt || tp == QMetaType::Char32;
2302 bool isUnsigned1 = isUnsigned(
t1);
2303 bool isUnsigned2 = isUnsigned(
t2);
2307 if (isUnsigned1 && iface1->size >
sizeof(
int))
2308 return QMetaType::ULongLong;
2309 if (isUnsigned2 && iface2->size >
sizeof(
int))
2310 return QMetaType::ULongLong;
2313 if (iface1->size >
sizeof(
int) || iface2->size >
sizeof(
int))
2314 return QMetaType::LongLong;
2317 if (isUnsigned1 || isUnsigned2)
2318 return QMetaType::UInt;
2321 return QMetaType::Int;
2328 if constexpr (std::numeric_limits<Numeric>::has_quiet_NaN) {
2329 if (std::isnan(lhs) || std::isnan(rhs))
2334 if constexpr (std::is_same_v<Numeric, QObject *>)
2335 smaller = std::less<QObject *>()(lhs, rhs);
2337 smaller = lhs < rhs;
2344 std::optional<qlonglong> l1 = qConvertToNumber(
d1, promotedType == QMetaType::Bool);
2345 std::optional<qlonglong> l2 = qConvertToNumber(
d2, promotedType == QMetaType::Bool);
2348 if (promotedType == QMetaType::UInt)
2349 return spaceShip<uint>(*l1, *l2);
2350 if (promotedType == QMetaType::LongLong)
2351 return spaceShip<qlonglong>(*l1, *l2);
2352 if (promotedType == QMetaType::ULongLong)
2353 return spaceShip<qulonglong>(*l1, *l2);
2355 return spaceShip<int>(*l1, *l2);
2365 const auto r1 = qConvertToRealNumber(
d1);
2366 const auto r2 = qConvertToRealNumber(
d2);
2375#ifndef QT_BOOTSTRAPPED
2382 return f &&
t && (
f->inherits(
t) ||
t->inherits(
f));
2398 auto metatype =
d.
type();
2400 if (metatype !=
v.metaType()) {
2404#ifndef QT_BOOTSTRAPPED
2413 if (!metatype.isValid())
2416 return metatype.equals(
d.
storage(),
v.d.storage());
2448#ifndef QT_BOOTSTRAPPED
2536 return d.
get<
void *>() ==
nullptr;
2540#ifndef QT_NO_DEBUG_STREAM
2545 dbg.nospace() <<
"QVariant(";
2549 if (!streamed && canConvert<QString>())
2562 customConstruct<ForceMove, NonNull>(
type.d_ptr, &
var.
d,
data);
2570 customConstruct<UseCopy, NonNull>(
type.d_ptr, &
var.
d,
data);
2574#if QT_DEPRECATED_SINCE(6, 0)
2581 dbg.nospace() <<
"QVariant::"
2745 type.registerType();
2746 const auto iface =
type.iface();
2747 if (isValidMetaTypeForVariant(iface,
copy)) {
2882 if (
type == QMetaType::fromType<QVariant>())
2886 return value.constData();
2906 return converted.constData();
qlonglong toLongLong(bool *ok=nullptr, int base=10) const
Returns the byte array converted to a {long long} using base base, which is ten by default.
\inmodule QtCore\reentrant
bool isDouble() const
Returns true if this QCborValue is of the floating-point type.
bool isInteger() const
Returns true if this QCborValue is of the integer type.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore \reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
bool isDouble() const
Returns true if the value contains a double.
\inmodule QtCore\compares equality \compareswith equality QLine \endcompareswith
\inmodule QtCore\compares equality \compareswith equality QLineF \endcompareswith
\variable Qt::partial_ordering::less
static const QPartialOrdering Less
static const QPartialOrdering Greater
static const QPartialOrdering Equivalent
static const QPartialOrdering Unordered
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore \reentrant
\macro QT_RESTRICTED_CAST_FROM_ASCII
double toDouble(bool *ok=nullptr) const
Returns the string converted to a double value.
\inmodule QtCore \reentrant
QVariantConstPointer(QVariant variant)
Constructs a QVariantConstPointer from a variant.
const QVariant * operator->() const
Returns a const pointer to the QVariant, conforming to the conventions for operator->().
QVariant operator*() const
Dereferences the QVariantConstPointer to retrieve its internal QVariant.
QChar toChar() const
Returns the variant as a QChar if the variant has userType() \l QMetaType::QChar, \l QMetaType::Int,...
static QVariant fromMetaType(QMetaType type, const void *copy=nullptr)
void * data()
Returns a pointer to the contained object as a generic void* that can be written to.
bool convert(QMetaType type)
Casts the variant to the requested type, targetType.
QVariant() noexcept
Constructs an invalid variant.
QDataStream & operator<<(QDataStream &s, const QVariant &p)
Writes a variant p to the stream s.
void clear()
Convert this variant to type QMetaType::UnknownType and free up any resources used.
QPointF toPointF() const
Returns the variant as a QPointF if the variant has userType() \l QMetaType::QPoint or \l QMetaType::...
T view()
Returns a mutable view of template type {T} on the stored value.
static QPartialOrdering compare(const QVariant &lhs, const QVariant &rhs)
Compares the objects at lhs and rhs for ordering.
qreal toReal(bool *ok=nullptr) const
Returns the variant as a qreal if the variant has userType() \l QMetaType::Double,...
QDateTime toDateTime() const
Returns the variant as a QDateTime if the variant has userType() \l QMetaType::QDateTime,...
void swap(QVariant &other) noexcept
bool isValid() const
Returns true if the storage type of this variant is not QMetaType::UnknownType; otherwise returns fal...
QJsonValue toJsonValue() const
double toDouble(bool *ok=nullptr) const
Returns the variant as a double if the variant has userType() \l QMetaType::Double,...
QList< QVariant > toList() const
Returns the variant as a QVariantList if the variant has userType() \l QMetaType::QVariantList.
QMap< QString, QVariant > toMap() const
Returns the variant as a QVariantMap if the variant has type() \l QMetaType::QVariantMap.
qlonglong toLongLong(bool *ok=nullptr) const
Returns the variant as a long long int if the variant has userType() \l QMetaType::LongLong,...
QPoint toPoint() const
Returns the variant as a QPoint if the variant has userType() \l QMetaType::QPoint or \l QMetaType::Q...
int toInt(bool *ok=nullptr) const
Returns the variant as an int if the variant has userType() \l QMetaType::Int, \l QMetaType::Bool,...
QLocale toLocale() const
Returns the variant as a QLocale if the variant has userType() \l QMetaType::QLocale; otherwise retur...
QSize toSize() const
Returns the variant as a QSize if the variant has userType() \l QMetaType::QSize; otherwise returns a...
void save(QDataStream &ds) const
Internal function for saving a variant to the stream s.
QTime toTime() const
Returns the variant as a QTime if the variant has userType() \l QMetaType::QTime, \l QMetaType::QDate...
float toFloat(bool *ok=nullptr) const
Returns the variant as a float if the variant has userType() \l QMetaType::Double,...
uint toUInt(bool *ok=nullptr) const
Returns the variant as an unsigned int if the variant has userType() \l QMetaType::UInt,...
QString toString() const
Returns the variant as a QString if the variant has a userType() including, but not limited to:
void load(QDataStream &ds)
Internal function for loading a variant from stream s.
bool toBool() const
Returns the variant as a bool if the variant has userType() Bool.
QBitArray toBitArray() const
Returns the variant as a QBitArray if the variant has userType() \l QMetaType::QBitArray; otherwise r...
QJsonArray toJsonArray() const
QHash< QString, QVariant > toHash() const
Returns the variant as a QHash<QString, QVariant> if the variant has type() \l QMetaType::QVariantHas...
int typeId() const
Returns the storage type of the value stored in the variant.
bool isNull() const
Returns true if this is a null variant, false otherwise.
const char * typeName() const
Returns the name of the type stored in the variant.
QJsonDocument toJsonDocument() const
QRectF toRectF() const
Returns the variant as a QRectF if the variant has userType() \l QMetaType::QRect or \l QMetaType::QR...
QLineF toLineF() const
Returns the variant as a QLineF if the variant has userType() \l QMetaType::QLineF; otherwise returns...
QVariant & operator=(const QVariant &other)
Move-assigns other to this QVariant instance.
QJsonObject toJsonObject() const
bool canConvert(QMetaType targetType) const
QRect toRect() const
Returns the variant as a QRect if the variant has userType() \l QMetaType::QRect; otherwise returns a...
QSizeF toSizeF() const
Returns the variant as a QSizeF if the variant has userType() \l QMetaType::QSizeF; otherwise returns...
QDate toDate() const
Returns the variant as a QDate if the variant has userType() \l QMetaType::QDate, \l QMetaType::QDate...
QByteArray toByteArray() const
Returns the variant as a QByteArray if the variant has userType() \l QMetaType::QByteArray or \l QMet...
QLine toLine() const
Returns the variant as a QLine if the variant has userType() \l QMetaType::QLine; otherwise returns a...
~QVariant()
Destroys the QVariant and the contained object.
QDataStream & operator>>(QDataStream &s, QVariant &p)
void create(int type, const void *copy)
QMetaType metaType() const
qulonglong toULongLong(bool *ok=nullptr) const
Returns the variant as an unsigned long long int if the variant has type() \l QMetaType::ULongLong,...
const void * constData() const
QStringList toStringList() const
Returns the variant as a QStringList if the variant has userType() \l QMetaType::QStringList,...
QUrl toUrl() const
Returns the variant as a QUrl if the variant has userType() \l QMetaType::QUrl; otherwise returns an ...
bool equals(const QVariant &other) const
const void * coerce(const QVariant &value, const QMetaType &type)
const void * convert(const QVariant &value, const QMetaType &type)
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
QHash< int, QWidget * > hash
[35multi]
QMap< QString, QString > map
[6]
Combined button and popup list for selecting options.
constexpr QBindableInterface iface
static jboolean copy(JNIEnv *, jobject)
class QT6_ONLY(Q_CORE_EXPORT) QChar
#define QT_WARNING_DISABLE_DEPRECATED
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
qint64 qRound64(qfloat16 d) noexcept
static ControlElement< T > * ptr(QWidget *widget)
GLsizei const GLfloat * v
[13]
GLint GLint GLint GLint GLint x
[0]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
[4]
#define Q_ASSERT_X(cond, x, msg)
QT_BEGIN_NAMESPACE constexpr std::underlying_type_t< Enum > qToUnderlying(Enum e) noexcept
QT_BEGIN_NAMESPACE typedef signed char qint8
static double toDouble(Value v)
constexpr int Qt6ToQt5GuiTypeDelta
static QPartialOrdering spaceShip(Numeric lhs, Numeric rhs)
static bool qIsFloatingPoint(uint tp)
static QPartialOrdering numericCompare(const QVariant::Private *d1, const QVariant::Private *d2)
constexpr int Qt5QQuaternion
static bool qIsNumericType(uint tp)
static bool canBeNumericallyCompared(const QtPrivate::QMetaTypeInterface *iface1, const QtPrivate::QMetaTypeInterface *iface2)
constexpr int Qt5KeySequence
static const ushort mapIdFromQt3ToCurrent[MapFromThreeCount]
static QPartialOrdering integralCompare(uint promotedType, const QVariant::Private *d1, const QVariant::Private *d2)
constexpr int Qt5LastCoreType
T qNumVariantToHelper(const QVariant::Private &d, bool *ok)
constexpr int Qt5FirstGuiType
static bool qvCanConvertMetaObject(QMetaType fromType, QMetaType toType)
constexpr int Qt5LastGuiType
static int numericTypePromotion(const QtPrivate::QMetaTypeInterface *iface1, const QtPrivate::QMetaTypeInterface *iface2)
constexpr int Qt5SizePolicy
constexpr int Qt5UserType
static QPartialOrdering pointerCompare(const QVariant::Private *d1, const QVariant::Private *d2)
static QVariant::PrivateShared * customConstructShared(size_t size, size_t align, F &&construct)
static void free(PrivateShared *p)
static PrivateShared * create(size_t size, size_t align)
static size_t computeAllocationSize(size_t size, size_t align)
static int computeOffset(PrivateShared *ps, size_t align)
static constexpr bool canUseInternalSpace(const QtPrivate::QMetaTypeInterface *type)
const void * storage() const
const QtPrivate::QMetaTypeInterface * typeInterface() const
uchar data[MaxInternalSize]