80 template <
typename T,
typename... Args>
81 using if_constructible = std::enable_if_t<
83 std::is_copy_constructible<q20::remove_cvref_t<T>>,
84 std::is_destructible<q20::remove_cvref_t<T>>,
85 std::is_constructible<q20::remove_cvref_t<T>, Args...>
90 using if_rvalue = std::enable_if_t<!std::is_reference_v<T>,
bool>;
92 struct CborValueStandIn { qint64 n;
void *c;
int t; };
97 inline PrivateShared() : ref(1) { }
99 static int computeOffset(PrivateShared *ps, size_t align);
100 static size_t computeAllocationSize(size_t size, size_t align);
101 static PrivateShared *create(size_t size, size_t align);
102 static void free(PrivateShared *p);
104 alignas(8) QAtomicInt ref;
107 const void *data()
const {
return reinterpret_cast<
const uchar *>(
this) + offset; }
108 void *data() {
return reinterpret_cast<uchar *>(
this) + offset; }
113 static constexpr size_t MaxInternalSize = 3 *
sizeof(
void *);
114 template <size_t S>
static constexpr bool FitsInInternalSize = S <= MaxInternalSize;
115 template<
typename T>
static constexpr bool CanUseInternalSpace =
116 (QTypeInfo<T>::isRelocatable && FitsInInternalSize<
sizeof(T)> &&
alignof(T) <=
alignof(
double));
117 static constexpr bool canUseInternalSpace(
const QtPrivate::QMetaTypeInterface *type)
120 return QMetaType::TypeFlags(type->flags) & QMetaType::RelocatableType &&
121 size_t(type->size) <= MaxInternalSize && size_t(type->alignment) <=
alignof(
double);
126 uchar data[MaxInternalSize] = {};
127 PrivateShared *shared;
128 double _forAlignment;
130 quintptr is_shared : 1;
131 quintptr is_null : 1;
132 quintptr packedType :
sizeof(QMetaType) * 8 - 2;
134 constexpr Private()
noexcept : is_shared(
false), is_null(
true), packedType(0) {}
135 explicit Private(
const QtPrivate::QMetaTypeInterface *iface)
noexcept;
136 template <
typename T>
explicit Private(std::piecewise_construct_t,
const T &t);
138 const void *storage()
const
139 {
return is_shared ? data.shared->data() : &data.data; }
141 template<
typename T>
const T &get()
const
142 {
return *
static_cast<
const T *>(storage()); }
144 inline const QtPrivate::QMetaTypeInterface *typeInterface()
const
146 return reinterpret_cast<
const QtPrivate::QMetaTypeInterface *>(packedType << 2);
149 inline QMetaType type()
const
151 return QMetaType(typeInterface());
155#if QT_DEPRECATED_SINCE(6
, 0
)
156 enum QT_DEPRECATED_VERSION_X_6_0(
"Use QMetaType::Type instead.") Type
158 Invalid = QMetaType::UnknownType,
159 Bool = QMetaType::Bool,
160 Int = QMetaType::Int,
161 UInt = QMetaType::UInt,
162 LongLong = QMetaType::LongLong,
163 ULongLong = QMetaType::ULongLong,
164 Double = QMetaType::Double,
165 Char = QMetaType::QChar,
166 Map = QMetaType::QVariantMap,
167 List = QMetaType::QVariantList,
168 String = QMetaType::QString,
169 StringList = QMetaType::QStringList,
170 ByteArray = QMetaType::QByteArray,
171 BitArray = QMetaType::QBitArray,
172 Date = QMetaType::QDate,
173 Time = QMetaType::QTime,
174 DateTime = QMetaType::QDateTime,
175 Url = QMetaType::QUrl,
176 Locale = QMetaType::QLocale,
177 Rect = QMetaType::QRect,
178 RectF = QMetaType::QRectF,
179 Size = QMetaType::QSize,
180 SizeF = QMetaType::QSizeF,
181 Line = QMetaType::QLine,
182 LineF = QMetaType::QLineF,
183 Point = QMetaType::QPoint,
184 PointF = QMetaType::QPointF,
185#if QT_CONFIG(regularexpression)
186 RegularExpression = QMetaType::QRegularExpression,
188 Hash = QMetaType::QVariantHash,
189#if QT_CONFIG(easingcurve)
190 EasingCurve = QMetaType::QEasingCurve,
192 Uuid = QMetaType::QUuid,
193#if QT_CONFIG(itemmodel)
194 ModelIndex = QMetaType::QModelIndex,
195 PersistentModelIndex = QMetaType::QPersistentModelIndex,
197 LastCoreType = QMetaType::LastCoreType,
199 Font = QMetaType::QFont,
200 Pixmap = QMetaType::QPixmap,
201 Brush = QMetaType::QBrush,
202 Color = QMetaType::QColor,
203 Palette = QMetaType::QPalette,
204 Image = QMetaType::QImage,
205 Polygon = QMetaType::QPolygon,
206 Region = QMetaType::QRegion,
207 Bitmap = QMetaType::QBitmap,
208 Cursor = QMetaType::QCursor,
209#if QT_CONFIG(shortcut)
210 KeySequence = QMetaType::QKeySequence,
212 Pen = QMetaType::QPen,
213 TextLength = QMetaType::QTextLength,
214 TextFormat = QMetaType::QTextFormat,
215 Transform = QMetaType::QTransform,
216 Matrix4x4 = QMetaType::QMatrix4x4,
217 Vector2D = QMetaType::QVector2D,
218 Vector3D = QMetaType::QVector3D,
219 Vector4D = QMetaType::QVector4D,
220 Quaternion = QMetaType::QQuaternion,
221 PolygonF = QMetaType::QPolygonF,
222 Icon = QMetaType::QIcon,
223 LastGuiType = QMetaType::LastGuiType,
225 SizePolicy = QMetaType::QSizePolicy,
227 UserType = QMetaType::User,
228 LastType = 0xffffffff
231 QVariant()
noexcept : d() {}
233 explicit QVariant(QMetaType type,
const void *copy =
nullptr);
234 QVariant(
const QVariant &other);
237 template <
typename T,
typename ...Args>
238 using is_noexcept_constructible = std::conjunction<
239 std::bool_constant<Private::CanUseInternalSpace<T>>,
240 std::is_nothrow_constructible<T, Args...>
244 template<
typename Referred>
248 const Referred m_referred;
253 explicit ConstReference(
const Referred &referred)
254 noexcept(std::is_nothrow_copy_constructible_v<Referred>)
255 : m_referred(referred) {}
256 explicit ConstReference(Referred &&referred)
257 noexcept(std::is_nothrow_move_constructible_v<Referred>)
258 : m_referred(std::move(referred)) {}
259 ConstReference(
const ConstReference &) =
default;
260 ConstReference(ConstReference &&) =
default;
261 ~ConstReference() =
default;
262 ConstReference &operator=(
const ConstReference &value) =
delete;
263 ConstReference &operator=(ConstReference &&value) =
delete;
266 operator QVariant()
const noexcept(Referred::canNoexceptConvertToQVariant);
269 template<
typename Referred>
275 friend void swap(Reference a, Reference b) {
return a.swap(std::move(b)); }
280 explicit Reference(
const Referred &referred)
281 noexcept(std::is_nothrow_copy_constructible_v<Referred>)
282 : m_referred(referred) {}
283 explicit Reference(Referred &&referred)
284 noexcept(std::is_nothrow_move_constructible_v<Referred>)
285 : m_referred(std::move(referred)) {}
286 Reference(
const Reference &) =
default;
287 Reference(Reference &&) =
default;
288 ~Reference() =
default;
290 Reference &operator=(
const Reference &value)
291 noexcept(Referred::canNoexceptAssignQVariant)
293 return operator=(QVariant(value));
296 Reference &operator=(Reference &&value)
297 noexcept(Referred::canNoexceptAssignQVariant)
299 return operator=(QVariant(value));
302 operator QVariant()
const noexcept(Referred::canNoexceptConvertToQVariant)
304 return ConstReference(m_referred);
307 void swap(Reference b)
310 QVariant tmp = *
this;
311 *
this = std::move(b);
316 Reference &operator=(
const QVariant &value)
noexcept(Referred::canNoexceptAssignQVariant);
319 template<
typename Pointed>
326 explicit ConstPointer(
const Pointed &pointed)
327 noexcept(std::is_nothrow_copy_constructible_v<Pointed>)
328 : m_pointed(pointed) {}
329 explicit ConstPointer(Pointed &&pointed)
330 noexcept(std::is_nothrow_move_constructible_v<Pointed>)
331 : m_pointed(std::move(pointed)) {}
333 ConstReference<Pointed> operator*()
334 const noexcept(std::is_nothrow_copy_constructible_v<Pointed>)
336 return ConstReference<Pointed>(m_pointed);
340 template<
typename Pointed>
347 explicit Pointer(
const Pointed &pointed)
348 noexcept(std::is_nothrow_copy_constructible_v<Pointed>)
349 : m_pointed(pointed) {}
350 explicit Pointer(Pointed &&pointed)
351 noexcept(std::is_nothrow_move_constructible_v<Pointed>)
352 : m_pointed(std::move(pointed)) {}
354 Reference<Pointed> operator*()
355 const noexcept(std::is_nothrow_copy_constructible_v<Pointed>)
357 return Reference<Pointed>(m_pointed);
361 template <
typename T,
typename... Args,
362 if_constructible<T, Args...> =
true>
363 explicit QVariant(std::in_place_type_t<T>, Args&&... args)
364 noexcept(is_noexcept_constructible<q20::remove_cvref_t<T>, Args...>::value)
365 : QVariant(std::in_place, QMetaType::fromType<q20::remove_cvref_t<T>>() )
367 void *data =
const_cast<
void *>(constData());
368 new (data) T(std::forward<Args>(args)...);
371 template <
typename T,
typename U,
typename... Args,
372 if_constructible<T, std::initializer_list<U> &, Args...> =
true>
373 explicit QVariant(std::in_place_type_t<T>, std::initializer_list<U> il, Args&&... args)
374 noexcept(is_noexcept_constructible<q20::remove_cvref_t<T>,
375 std::initializer_list<U> &,
378 : QVariant(std::in_place, QMetaType::fromType<q20::remove_cvref_t<T>>())
380 char *data =
static_cast<
char *>(
const_cast<
void *>(constData()));
381 new (data) T(il, std::forward<Args>(args)...);
385 QVariant(
int i)
noexcept;
386 QVariant(uint ui)
noexcept;
387 QVariant(qlonglong ll)
noexcept;
388 QVariant(qulonglong ull)
noexcept;
389 QVariant(
bool b)
noexcept;
390 QVariant(
double d)
noexcept;
391 QVariant(
float f)
noexcept;
394 QVariant(QChar qchar)
noexcept;
395 QVariant(QDate date)
noexcept;
396 QVariant(QTime time)
noexcept;
397 QVariant(
const QBitArray &bitarray)
noexcept;
398 QVariant(
const QByteArray &bytearray)
noexcept;
399 QVariant(
const QDateTime &datetime)
noexcept;
400 QVariant(
const QHash<QString, QVariant> &hash)
noexcept;
401 QVariant(
const QJsonArray &jsonArray)
noexcept;
402 QVariant(
const QJsonObject &jsonObject)
noexcept;
403 QVariant(
const QList<QVariant> &list)
noexcept;
404 QVariant(
const QLocale &locale)
noexcept;
405 QVariant(
const QMap<QString, QVariant> &map)
noexcept;
406 QVariant(
const QRegularExpression &re)
noexcept;
407 QVariant(
const QString &string)
noexcept;
408 QVariant(
const QStringList &stringlist)
noexcept;
409 QVariant(
const QUrl &url)
noexcept;
413 QVariant(
const QJsonValue &jsonValue)
noexcept(Private::FitsInInternalSize<
sizeof(CborValueStandIn)>);
414 QVariant(
const QModelIndex &modelIndex)
noexcept(Private::FitsInInternalSize<8 + 2 *
sizeof(quintptr)>);
415 QVariant(QUuid uuid)
noexcept(Private::FitsInInternalSize<16>);
416 QVariant(QSize size)
noexcept;
417 QVariant(QSizeF size)
noexcept(Private::FitsInInternalSize<
sizeof(qreal) * 2>);
418 QVariant(QPoint pt)
noexcept;
419 QVariant(QPointF pt)
noexcept(Private::FitsInInternalSize<
sizeof(qreal) * 2>);
420 QVariant(QLine line)
noexcept(Private::FitsInInternalSize<
sizeof(
int) * 4>);
421 QVariant(QLineF line)
noexcept(Private::FitsInInternalSize<
sizeof(qreal) * 4>);
422 QVariant(QRect rect)
noexcept(Private::FitsInInternalSize<
sizeof(
int) * 4>);
423 QVariant(QRectF rect)
noexcept(Private::FitsInInternalSize<
sizeof(qreal) * 4>);
426 QVariant(
const QEasingCurve &easing)
noexcept(
false);
427 QVariant(
const QJsonDocument &jsonDocument)
noexcept(
false);
428 QVariant(
const QPersistentModelIndex &modelIndex)
noexcept(
false);
430#ifndef QT_NO_CAST_FROM_ASCII
431 QT_ASCII_CAST_WARN QVariant(
const char *str)
noexcept(
false)
432 : QVariant(QString::fromUtf8(str))
435 QVariant(QLatin1StringView string)
noexcept(
false);
437#if !defined(Q_CC_GHS)
439 template <
typename T,
440 std::enable_if_t<std::disjunction_v<std::is_pointer<T>, std::is_member_pointer<T>>,
bool> =
false>
441 QVariant(T) =
delete;
443 QVariant(
const volatile void *) =
delete;
446#if QT_CORE_REMOVED_SINCE(6
, 5
)
447 QVariant(
const QSize &size);
448 QVariant(
const QSizeF &size);
449 QVariant(
const QPoint &pt);
450 QVariant(
const QPointF &pt);
451 QVariant(
const QLine &line);
452 QVariant(
const QLineF &line);
453 QVariant(
const QRect &rect);
454 QVariant(
const QRectF &rect);
455 QVariant(
const QUuid &uuid);
458 QVariant& operator=(
const QVariant &other);
459 inline QVariant(QVariant &&other)
noexcept : d(other.d)
460 { other.d = Private(); }
461 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QVariant)
463 inline void swap(QVariant &other)
noexcept { std::swap(d, other.d); }
465 int userType()
const {
return typeId(); }
469 const QtPrivate::QMetaTypeInterface *mt = metaType().iface();
472 int id = mt->typeId.loadRelaxed();
477 QT_CORE_INLINE_SINCE(6, 10)
478 const char *typeName()
const;
479 QT_CORE_INLINE_SINCE(6, 10)
480 QMetaType metaType()
const;
482 bool canConvert(QMetaType targetType)
const
483 {
return QMetaType::canConvert(d.type(), targetType); }
484 bool convert(QMetaType type);
486 bool canView(QMetaType targetType)
const
487 {
return QMetaType::canView(d.type(), targetType); }
489#if QT_DEPRECATED_SINCE(6
, 0
)
490 QT_DEPRECATED_VERSION_6_0
491 bool canConvert(
int targetTypeId)
const
492 {
return QMetaType::canConvert(d.type(), QMetaType(targetTypeId)); }
493 QT_DEPRECATED_VERSION_6_0
494 bool convert(
int targetTypeId)
495 {
return convert(QMetaType(targetTypeId)); }
498 inline bool isValid()
const;
504 inline bool isDetached()
const;
506 int toInt(
bool *ok =
nullptr)
const;
507 uint toUInt(
bool *ok =
nullptr)
const;
508 qlonglong toLongLong(
bool *ok =
nullptr)
const;
509 qulonglong toULongLong(
bool *ok =
nullptr)
const;
511 double toDouble(
bool *ok =
nullptr)
const;
512 float toFloat(
bool *ok =
nullptr)
const;
513 qreal toReal(
bool *ok =
nullptr)
const;
514 QByteArray toByteArray()
const;
515 QBitArray toBitArray()
const;
516 QString toString()
const;
517 QStringList toStringList()
const;
518 QChar toChar()
const;
519 QDate toDate()
const;
520 QTime toTime()
const;
521 QDateTime toDateTime()
const;
522 QList<QVariant> toList()
const;
523 QMap<QString, QVariant> toMap()
const;
524 QHash<QString, QVariant> toHash()
const;
526 QPoint toPoint()
const;
527 QPointF toPointF()
const;
528 QRect toRect()
const;
529 QSize toSize()
const;
530 QSizeF toSizeF()
const;
531 QLine toLine()
const;
532 QLineF toLineF()
const;
533 QRectF toRectF()
const;
534 QLocale toLocale()
const;
535#if QT_CONFIG(regularexpression)
536 QRegularExpression toRegularExpression()
const;
538#if QT_CONFIG(easingcurve)
539 QEasingCurve toEasingCurve()
const;
541 QUuid toUuid()
const;
543 QJsonValue toJsonValue()
const;
544 QJsonObject toJsonObject()
const;
545 QJsonArray toJsonArray()
const;
546 QJsonDocument toJsonDocument()
const;
547#if QT_CONFIG(itemmodel)
548 QModelIndex toModelIndex()
const;
549 QPersistentModelIndex toPersistentModelIndex()
const;
552#ifndef QT_NO_DATASTREAM
553 void load(QDataStream &ds);
554 void save(QDataStream &ds)
const;
556#if QT_DEPRECATED_SINCE(6
, 0
)
558 QT_WARNING_DISABLE_DEPRECATED
559 QT_DEPRECATED_VERSION_X_6_0(
"Use the constructor taking a QMetaType instead.")
560 explicit QVariant(Type type)
561 : QVariant(QMetaType(
int(type)))
563 QT_DEPRECATED_VERSION_X_6_0(
"Use typeId() or metaType().")
566 int type = d.type().id();
567 return type >= QMetaType::User ? UserType :
static_cast<Type>(type);
569 QT_DEPRECATED_VERSION_6_0
570 static const char *typeToName(
int typeId)
571 {
return QMetaType(typeId).name(); }
572 QT_DEPRECATED_VERSION_6_0
573 static Type nameToType(
const char *name)
575 int metaType = QMetaType::fromName(name).id();
576 return metaType <=
int(UserType) ? QVariant::Type(metaType) : UserType;
582 const void *constData()
const
583 {
return d.storage(); }
584 inline const void *data()
const {
return constData(); }
587 template <
typename T>
588 void verifySuitableForEmplace()
590 static_assert(!std::is_reference_v<T>,
591 "QVariant does not support reference types");
592 static_assert(!std::is_const_v<T>,
593 "QVariant does not support const types");
594 static_assert(std::is_copy_constructible_v<T>,
595 "QVariant requires that the type is copyable");
596 static_assert(std::is_destructible_v<T>,
597 "QVariant requires that the type is destructible");
600 template <
typename T,
typename... Args>
601 T &emplaceImpl(Args&&... args)
603 verifySuitableForEmplace<T>();
604 auto data =
static_cast<T *>(prepareForEmplace(QMetaType::fromType<T>()));
605 return *q20::construct_at(data, std::forward<Args>(args)...);
609 template <
typename T,
typename... Args,
610 if_constructible<T, Args...> =
true>
611 T &emplace(Args&&... args)
613 return emplaceImpl<T>(std::forward<Args>(args)...);
616 template <
typename T,
typename U,
typename... Args,
617 if_constructible<T, std::initializer_list<U> &, Args...> =
true>
618 T &emplace(std::initializer_list<U> list, Args&&... args)
620 return emplaceImpl<T>(list, std::forward<Args>(args)...);
623 template<
typename T,
typename = std::enable_if_t<!std::is_same_v<std::decay_t<T>, QVariant>>>
624 void setValue(T &&avalue)
626 using VT = std::decay_t<T>;
627 QMetaType metaType = QMetaType::fromType<VT>();
629 if (isDetached() && d.type() == metaType) {
630 *
reinterpret_cast<VT *>(
const_cast<
void *>(constData())) = std::forward<T>(avalue);
633 *
this = QVariant::fromValue<VT>(std::forward<T>(avalue));
637 void setValue(
const QVariant &avalue)
642 void setValue(QVariant &&avalue)
644 *
this = std::move(avalue);
648 inline T value()
const &
649 {
return qvariant_cast<T>(*
this); }
655 QMetaType::view(metaType(), data(), QMetaType::fromType<T>(), &t);
661 {
return qvariant_cast<T>(std::move(*
this)); }
663 template<
typename T, if_rvalue<T> =
true>
666
667
668 static inline auto fromValue(T &&value)
669 noexcept(std::is_nothrow_copy_constructible_v<T> && Private::CanUseInternalSpace<T>)
670 -> std::enable_if_t<std::conjunction_v<std::is_copy_constructible<T>,
671 std::is_destructible<T>>, QVariant>
673 static inline QVariant fromValue(T &&value)
677 using Type = std::remove_cv_t<T>;
678 if constexpr (std::is_null_pointer_v<Type>)
679 return QVariant::fromMetaType(QMetaType::fromType<std::nullptr_t>());
680 else if constexpr (std::is_same_v<Type, QVariant>)
681 return std::forward<T>(value);
682 else if constexpr (std::is_same_v<Type, std::monostate>)
684 QMetaType mt = QMetaType::fromType<Type>();
689 if constexpr (std::conjunction_v<std::is_move_constructible<Type>, std::negation<std::is_const<T>>>)
690 return moveConstruct(QMetaType::fromType<Type>(), std::addressof(value));
692 return copyConstruct(mt, std::addressof(value));
697 static inline auto fromValue(
const T &value)
698 noexcept(std::is_nothrow_copy_constructible_v<T> && Private::CanUseInternalSpace<T>)
699 -> std::enable_if_t<std::is_copy_constructible_v<T> && std::is_destructible_v<T>, QVariant>
701 static inline QVariant fromValue(
const T &value)
704 if constexpr (std::is_null_pointer_v<T>)
705 return QVariant(QMetaType::fromType<std::nullptr_t>());
706 else if constexpr (std::is_same_v<T, QVariant>)
708 else if constexpr (std::is_same_v<T, std::monostate>)
710 return QVariant(QMetaType::fromType<T>(), std::addressof(value));
713 template<
typename... Types>
714 static inline QVariant fromStdVariant(
const std::variant<Types...> &value)
716 return fromStdVariantImpl(value);
719 template<
typename... Types>
720 static QVariant fromStdVariant(std::variant<Types...> &&value)
722 return fromStdVariantImpl(std::move(value));
725 static QVariant fromMetaType(QMetaType type,
const void *copy =
nullptr);
728 bool canConvert()
const
729 {
return canConvert(QMetaType::fromType<T>()); }
733 {
return canView(QMetaType::fromType<T>()); }
735 static QPartialOrdering compare(
const QVariant &lhs,
const QVariant &rhs);
738 template <
typename StdVariant>
739 static QVariant fromStdVariantImpl(StdVariant &&v)
741 if (Q_UNLIKELY(v.valueless_by_exception()))
743 auto visitor = [](
auto &&arg) {
744 return QVariant::fromValue(q23::forward_like<StdVariant>(arg));
746 return std::visit(visitor, std::forward<StdVariant>(v));
749 friend bool comparesEqual(
const QVariant &a,
const QVariant &b)
750 {
return a.equals(b); }
751 Q_DECLARE_EQUALITY_COMPARABLE_NON_NOEXCEPT(QVariant)
753#ifndef QT_NO_DEBUG_STREAM
754 template <
typename T>
755 friend auto operator<<(
const QDebug &debug,
const T &variant) -> std::enable_if_t<std::is_same_v<T, QVariant>, QDebug> {
756 return variant.qdebugHelper(debug);
758 QDebug qdebugHelper(QDebug)
const;
761 template <
typename T>
762 friend T *get_if(QVariant *v)
noexcept
765 if (!v || v->d.type() != QMetaType::fromType<T>())
767 return static_cast<T*>(v->data());
769 template <
typename T>
770 friend const T *get_if(
const QVariant *v)
noexcept
773 if (!v || v->d.is_null || v->d.type() != QMetaType::fromType<T>())
775 return static_cast<
const T*>(v->data());
778#define Q_MK_GET(cvref)
779 template <typename T>
780 friend T cvref get(QVariant cvref v)
782 if constexpr (std::is_const_v<T cvref>)
783 Q_ASSERT(!v.d.is_null);
784 Q_ASSERT(v.d.type() == QMetaType::fromType<q20::remove_cvref_t<T>>());
785 return static_cast<T cvref>(*get_if<T>(&v));
794 static QVariant moveConstruct(QMetaType type,
void *data);
795 static QVariant copyConstruct(QMetaType type,
const void *data);
798 friend inline T qvariant_cast(
const QVariant &);
800 friend inline T qvariant_cast(QVariant &&);
804 void create(
int type,
const void *copy);
805 void create(QMetaType type,
const void *copy);
806 bool equals(
const QVariant &other)
const;
807 bool convert(
int type,
void *ptr)
const;
808 bool view(
int type,
void *ptr);
812 inline QVariant(
void *) =
delete;
819 QVariant(QMetaType::Type) =
delete;
822 QVariant(std::in_place_t, QMetaType type);
824 void *prepareForEmplace(QMetaType type);
831 QVariant(Qt::GlobalColor) =
delete;
832 QVariant(Qt::BrushStyle) =
delete;
833 QVariant(Qt::PenStyle) =
delete;
834 QVariant(Qt::CursorShape) =
delete;
835#ifdef QT_NO_CAST_FROM_ASCII
837 inline QVariant(
const char *) =
delete;
840 typedef Private DataPtr;
841 inline DataPtr &data_ptr() {
return d; }
842 inline const DataPtr &data_ptr()
const {
return d; }