Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qjsonvalue.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// Copyright (C) 2022 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#include <qjsonobject.h>
6#include <qjsonvalue.h>
7#include <qjsonarray.h>
8#include <qjsondocument.h>
9#include <qurl.h>
10#include <quuid.h>
11#include <qvariant.h>
12#include <qstringlist.h>
13#include <qmap.h>
14#include <qhash.h>
15#include <qdebug.h>
16#include "qdatastream.h"
17
18#include <private/qnumeric_p.h>
19#include <private/qcborvalue_p.h>
20
21#include <qcborarray.h>
22#include <qcbormap.h>
23
24#include "qjson_p.h"
25
27
29{
30 switch (type) {
32 return QJsonValue::Null;
35 return QJsonValue::Bool;
38 return QJsonValue::Double;
40 return QJsonValue::String;
42 return QJsonValue::Array;
43 case QCborValue::Map:
44 return QJsonValue::Object;
46 default:
48 }
49}
50
113 switch (type) {
114 case Null:
116 break;
117 case Bool:
119 break;
120 case Double:
122 break;
123 case String:
125 break;
126 case Array:
128 break;
129 case Object:
131 break;
132 case Undefined:
133 break;
134 }
135}
136
141 : value(b)
142{
143}
144
145static inline QCborValue doubleValueHelper(double v)
146{
147 qint64 n = 0;
148 // Convert to integer if the number is an integer and changing wouldn't
149 // introduce additional digit precision not present in the double.
150 if (convertDoubleTo<qint64>(v, &n, false /* allow_precision_upgrade */))
151 return n;
152 else
153 return v;
154}
155
163
169 : value(v)
170{
171}
172
183
188 : value(s)
189{
190}
191
211
216 : value(QCborArray::fromJsonArray(a))
217{
218}
219
225 : value(QCborArray::fromJsonArray(std::move(a)))
226{
227}
228
233 : value(QCborMap::fromJsonObject(o))
234{
235}
236
242 : value(QCborMap::fromJsonObject(std::move(o)))
243{
244}
245
246
250QJsonValue::~QJsonValue() = default;
251
255QJsonValue::QJsonValue(const QJsonValue &other) noexcept = default;
256
261{
263 swap(copy);
264 return *this;
265}
266
268 : value(std::move(other.value))
269{
270 other.value = QCborValue(nullptr);
271}
272
274{
275 value.swap(other.value);
276}
277
352#ifndef QT_NO_VARIANT
476{
477 switch (variant.metaType().id()) {
478 case QMetaType::Nullptr:
479 return QJsonValue(Null);
480 case QMetaType::Bool:
481 return QJsonValue(variant.toBool());
482 case QMetaType::Short:
483 case QMetaType::UShort:
484 case QMetaType::Int:
485 case QMetaType::UInt:
486 case QMetaType::LongLong:
487 return QJsonValue(variant.toLongLong());
488 case QMetaType::ULongLong:
489 if (variant.toULongLong() <= static_cast<uint64_t>(std::numeric_limits<qint64>::max()))
490 return QJsonValue(variant.toLongLong());
492 case QMetaType::Float:
493 case QMetaType::Double: {
494 double v = variant.toDouble();
495 return qt_is_finite(v) ? QJsonValue(v) : QJsonValue();
496 }
497 case QMetaType::QString:
498 return QJsonValue(variant.toString());
499 case QMetaType::QStringList:
501 case QMetaType::QVariantList:
503 case QMetaType::QVariantMap:
505 case QMetaType::QVariantHash:
507#ifndef QT_BOOTSTRAPPED
508 case QMetaType::QUrl:
510 case QMetaType::QUuid:
512 case QMetaType::QJsonValue:
513 return variant.toJsonValue();
514 case QMetaType::QJsonObject:
515 return variant.toJsonObject();
516 case QMetaType::QJsonArray:
517 return variant.toJsonArray();
518 case QMetaType::QJsonDocument: {
520 return doc.isArray() ? QJsonValue(doc.array()) : QJsonValue(doc.object());
521 }
522 case QMetaType::QCborValue:
523 return qvariant_cast<QCborValue>(variant).toJsonValue();
524 case QMetaType::QCborArray:
525 return qvariant_cast<QCborArray>(variant).toJsonArray();
526 case QMetaType::QCborMap:
527 return qvariant_cast<QCborMap>(variant).toJsonObject();
528#endif
529 default:
530 break;
531 }
532 QString string = variant.toString();
533 if (string.isEmpty())
534 return QJsonValue();
535 return QJsonValue(string);
536}
537
554{
555 switch (value.type()) {
556 case QCborValue::True:
557 return true;
559 return false;
561 return toInteger();
563 return toDouble();
565 return toString();
567 return toArray().toVariantList();
568 case QCborValue::Map:
569 return toObject().toVariantMap();
570 case QCborValue::Null:
571 return QVariant::fromValue(nullptr);
573 default:
574 break;
575 }
576 return QVariant();
577}
578
595#endif // !QT_NO_VARIANT
596
603{
604 return convertFromCborType(value.type());
605}
606
612bool QJsonValue::toBool(bool defaultValue) const
613{
614 switch (value.type()) {
615 case QCborValue::True:
616 return true;
618 return false;
619 default:
620 return defaultValue;
621 }
622}
623
631int QJsonValue::toInt(int defaultValue) const
632{
633 switch (value.type()) {
634 case QCborValue::Double: {
635 int dblInt;
636 if (convertDoubleTo<int>(toDouble(), &dblInt))
637 return dblInt;
638 break;
639 }
640 case QCborValue::Integer: {
641 const auto n = value.toInteger();
642 if (qint64(int(n)) == n)
643 return int(n);
644 break;
645 }
646 default:
647 break;
648 }
649 return defaultValue;
650}
651
660{
661 switch (value.type()) {
663 return value.toInteger();
664 case QCborValue::Double: {
665 qint64 dblInt;
666 if (convertDoubleTo<qint64>(toDouble(), &dblInt))
667 return dblInt;
668 break;
669 }
670 default:
671 break;
672 }
673 return defaultValue;
674}
675
681double QJsonValue::toDouble(double defaultValue) const
682{
683 return value.toDouble(defaultValue);
684}
685
691QString QJsonValue::toString(const QString &defaultValue) const
692{
693 return value.toString(defaultValue);
694}
695
704{
705 return value.toString();
706}
707
713QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const
714{
715 if (!isArray())
716 return defaultValue;
717 QCborContainerPrivate *dd = nullptr;
719 const auto container = QJsonPrivate::Value::container(value);
720 Q_ASSERT(n == -1 || container == nullptr);
721 if (n < 0)
722 dd = container;
723 return QJsonArray(dd);
724}
725
734{
735 return toArray(QJsonArray());
736}
737
744{
745 if (!isObject())
746 return defaultValue;
747 QCborContainerPrivate *dd = nullptr;
748 const auto container = QJsonPrivate::Value::container(value);
750 Q_ASSERT(n == -1 || container == nullptr);
751 if (n < 0)
752 dd = container;
753 return QJsonObject(dd);
754}
755
764{
765 return toObject(QJsonObject());
766}
767
781{
782 return (*this)[QStringView(key)];
783}
784
790{
791 if (!isObject())
793
794 return toObject().value(key);
795}
796
802{
803 if (!isObject())
805
806 return toObject().value(key);
807}
808
822{
823 if (!isArray())
825
826 return toArray().at(i);
827}
828
834bool comparesEqual(const QJsonValue &lhs, const QJsonValue &rhs) noexcept
835{
836 if (lhs.value.type() != rhs.value.type()) {
837 if (lhs.isDouble() && rhs.isDouble()) {
838 // One value Cbor integer, one Cbor double, should interact as doubles.
839 return lhs.toDouble() == rhs.toDouble();
840 }
841 return false;
842 }
843
844 switch (lhs.value.type()) {
846 case QCborValue::Null:
847 case QCborValue::True:
849 break;
851 return lhs.toDouble() == rhs.toDouble();
853 return QJsonPrivate::Value::valueHelper(lhs.value)
856 return lhs.toString() == rhs.toString();
858 return lhs.toArray() == rhs.toArray();
859 case QCborValue::Map:
860 return lhs.toObject() == rhs.toObject();
861 default:
862 return false;
863 }
864 return true;
865}
866
896void QJsonValueRef::detach()
897{
898#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
900 d = QCborContainerPrivate::detach(d, d->elements.size());
901
902 if (is_object)
903 o->o.reset(d);
904 else
905 a->a.reset(d);
906#else
907 d = QCborContainerPrivate::detach(d, d->elements.size());
908#endif
909}
910
912{
915 if (is_object && value.isUndefined()) {
916 d->removeAt(index);
917 d->removeAt(index - 1);
918 } else {
919 d->replaceAt(index, value);
920 }
921
922 return ref;
923}
924
925QJsonValueRef &QJsonValueRef::operator =(const QJsonValue &val)
926{
927 detach();
928 return assignToRef(*this, QCborValue::fromJsonValue(val), is_object);
929}
930
931QJsonValueRef &QJsonValueRef::operator =(const QJsonValueRef &ref)
932{
933 // ### optimize more?
936
937 if (d == QJsonPrivate::Value::container(*this) &&
939 return *this; // self assignment
940
941 detach();
942 return assignToRef(*this, d->valueAt(index), is_object);
943}
944
945#ifndef QT_NO_VARIANT
947{
948 return concrete(*this).toVariant();
949}
950#endif // !QT_NO_VARIANT
951
953{
954 return concrete(*this).toArray();
955}
956
958{
959 return concrete(*this).toObject();
960}
961
966
967bool QJsonValueConstRef::concreteBool(QJsonValueConstRef self, bool defaultValue) noexcept
968{
970 if (e.type == QCborValue::False)
971 return false;
972 if (e.type == QCborValue::True)
973 return true;
974 return defaultValue;
975}
976
978{
980 qint64 v = defaultValue;
981 if (e.type == QCborValue::Double) {
982 // convertDoubleTo modifies the output even on returning false
983 if (!convertDoubleTo<qint64>(e.fpvalue(), &v))
984 v = defaultValue;
985 } else if (e.type == QCborValue::Integer) {
986 v = e.value;
987 }
988 if (clamp && qint64(int(v)) != v)
989 return defaultValue;
990 return v;
991}
992
993double QJsonValueConstRef::concreteDouble(QJsonValueConstRef self, double defaultValue) noexcept
994{
996 if (e.type == QCborValue::Double)
997 return e.fpvalue();
998 if (e.type == QCborValue::Integer)
999 return e.value;
1000 return defaultValue;
1001}
1002
1004{
1008 return defaultValue;
1009 return d->stringAt(index);
1010}
1011
1018
1020{
1021 Q_ASSERT(self.is_object);
1022 Q_ASSERT(self.is_object);
1025
1026 Q_ASSERT(d);
1027 Q_ASSERT(index < d->elements.size());
1028 return d->stringAt(index - 1);
1029}
1030
1031#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
1032QVariant QJsonValueRef::toVariant() const
1033{
1035}
1036
1037QJsonArray QJsonValueRef::toArray() const
1038{
1040}
1041
1042QJsonObject QJsonValueRef::toObject() const
1043{
1045}
1046
1047QJsonValue QJsonValueRef::toValue() const
1048{
1049 return concrete(*this);
1050}
1051#else
1052QJsonValueRef QJsonValueRef::operator[](qsizetype key)
1053{
1054 if (d->elements.at(index).type != QCborValue::Array)
1055 d->replaceAt(index, QCborValue::Array);
1056
1057 auto &e = d->elements[index];
1058 e.container = QCborContainerPrivate::grow(e.container, key); // detaches
1060
1061 return QJsonValueRef(e.container, key, false);
1062}
1063
1064QJsonValueRef QJsonValueRef::operator[](QAnyStringView key)
1065{
1066 // must go through QJsonObject because some of the machinery is non-static
1067 // member or file-static in qjsonobject.cpp
1069 QJsonValueRef ret = key.visit([&](auto v) {
1070 if constexpr (std::is_same_v<decltype(v), QUtf8StringView>)
1071 return o[QString::fromUtf8(v)];
1072 else
1073 return o[v];
1074 });
1075
1076 // ### did the QJsonObject::operator[] above detach?
1077 QCborContainerPrivate *x = o.o.take();
1078 Q_ASSERT(x->ref.loadRelaxed() == 1);
1079
1080 auto &e = d->elements[index];
1081 if (e.flags & QtCbor::Element::IsContainer && e.container != x)
1082 o.o.reset(e.container); // might not an object!
1083
1085 e.container = x;
1086
1087 return ret;
1088}
1089#endif
1090
1091size_t qHash(const QJsonValue &value, size_t seed)
1092{
1093 switch (value.type()) {
1094 case QJsonValue::Null:
1095 return qHash(nullptr, seed);
1096 case QJsonValue::Bool:
1097 return qHash(value.toBool(), seed);
1098 case QJsonValue::Double:
1099 return qHash(value.toDouble(), seed);
1100 case QJsonValue::String:
1101 return qHash(value.toString(), seed);
1102 case QJsonValue::Array:
1103 return qHash(value.toArray(), seed);
1104 case QJsonValue::Object:
1105 return qHash(value.toObject(), seed);
1107 return seed;
1108 }
1109 Q_UNREACHABLE_RETURN(0);
1110}
1111
1112#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
1114{
1115 QDebugStateSaver saver(dbg);
1116 switch (o.value.type()) {
1118 dbg << "QJsonValue(undefined)";
1119 break;
1120 case QCborValue::Null:
1121 dbg << "QJsonValue(null)";
1122 break;
1123 case QCborValue::True:
1124 case QCborValue::False:
1125 dbg.nospace() << "QJsonValue(bool, " << o.toBool() << ')';
1126 break;
1128 dbg.nospace() << "QJsonValue(double, " << o.toInteger() << ')';
1129 break;
1130 case QCborValue::Double:
1131 dbg.nospace() << "QJsonValue(double, " << o.toDouble() << ')';
1132 break;
1133 case QCborValue::String:
1134 dbg.nospace() << "QJsonValue(string, " << o.toString() << ')';
1135 break;
1136 case QCborValue::Array:
1137 dbg.nospace() << "QJsonValue(array, ";
1138 dbg << o.toArray();
1139 dbg << ')';
1140 break;
1141 case QCborValue::Map:
1142 dbg.nospace() << "QJsonValue(object, ";
1143 dbg << o.toObject();
1144 dbg << ')';
1145 break;
1146 default:
1147 Q_UNREACHABLE();
1148 }
1149 return dbg;
1150}
1151#endif
1152
1153#ifndef QT_NO_DATASTREAM
1155{
1156 quint8 type = v.type();
1157 stream << type;
1158 switch (type) {
1160 case QJsonValue::Null:
1161 break;
1162 case QJsonValue::Bool:
1163 stream << v.toBool();
1164 break;
1165 case QJsonValue::Double:
1166 stream << v.toDouble();
1167 break;
1168 case QJsonValue::String:
1169 stream << v.toString();
1170 break;
1171 case QJsonValue::Array:
1172 stream << v.toArray();
1173 break;
1174 case QJsonValue::Object:
1175 stream << v.toObject();
1176 break;
1177 }
1178 return stream;
1179}
1180
1182{
1183 quint8 type;
1184 stream >> type;
1185 switch (type) {
1187 case QJsonValue::Null:
1189 break;
1190 case QJsonValue::Bool: {
1191 bool b;
1192 stream >> b;
1193 v = QJsonValue(b);
1194 break;
1195 } case QJsonValue::Double: {
1196 double d;
1197 stream >> d;
1198 v = QJsonValue{d};
1199 break;
1200 } case QJsonValue::String: {
1201 QString s;
1202 stream >> s;
1203 v = QJsonValue{s};
1204 break;
1205 }
1206 case QJsonValue::Array: {
1207 QJsonArray a;
1208 stream >> a;
1209 v = QJsonValue{a};
1210 break;
1211 }
1212 case QJsonValue::Object: {
1213 QJsonObject o;
1214 stream >> o;
1215 v = QJsonValue{o};
1216 break;
1217 }
1218 default: {
1219 stream.setStatus(QDataStream::ReadCorruptData);
1221 }
1222 }
1223 return stream;
1224}
1225#endif
1226
\inmodule QtCore
\inmodule QtCore\reentrant
Definition qcborarray.h:20
static QCborArray fromJsonArray(const QJsonArray &array)
Converts all JSON items found in the array array to CBOR using QCborValue::fromJson(),...
QString stringAt(qsizetype idx) const
static QCborContainerPrivate * grow(QCborContainerPrivate *d, qsizetype index)
Prepare for an insertion at position index.
static QCborContainerPrivate * detach(QCborContainerPrivate *d, qsizetype reserved)
QList< QtCbor::Element > elements
\inmodule QtCore\reentrant
Definition qcbormap.h:21
static QCborMap fromJsonObject(const QJsonObject &o)
Converts all JSON items found in the obj object to CBOR using QCborValue::fromJson(),...
\inmodule QtCore\reentrant
Definition qcborvalue.h:47
Type
This enum represents the QCborValue type.
Definition qcborvalue.h:70
static QCborValue fromJsonValue(const QJsonValue &v)
Converts the JSON value contained in v into its corresponding CBOR value and returns it.
\inmodule QtCore\reentrant
Definition qdatastream.h:46
\inmodule QtCore
\inmodule QtCore
\inmodule QtCore\reentrant
Definition qjsonarray.h:18
static QJsonArray fromStringList(const QStringList &list)
Converts the string list list to a QJsonArray.
static QJsonArray fromVariantList(const QVariantList &list)
Converts the variant list list to a QJsonArray.
QJsonValue at(qsizetype i) const
Returns a QJsonValue representing the value for index i.
QVariantList toVariantList() const
Converts this object to a QVariantList.
\inmodule QtCore\reentrant
bool isArray() const
Returns true if the document contains an array.
QJsonArray array() const
Returns the QJsonArray contained in the document.
QJsonObject object() const
Returns the QJsonObject contained in the document.
\inmodule QtCore\reentrant
Definition qjsonobject.h:20
QVariantMap toVariantMap() const
Converts this object to a QVariantMap.
static QJsonObject fromVariantMap(const QVariantMap &map)
Converts the variant map map to a QJsonObject.
QJsonValue value(const QString &key) const
Returns a QJsonValue representing the value for the key key.
static QJsonObject fromVariantHash(const QVariantHash &map)
Converts the variant hash hash to a QJsonObject.
static QJsonValue fromTrustedCbor(const QCborValue &v)
Definition qjson_p.h:200
static qsizetype indexHelper(QJsonValueConstRef r) noexcept
Definition qjson_p.h:188
static const QtCbor::Element & elementHelper(QJsonValueConstRef r) noexcept
Definition qjson_p.h:195
static qint64 valueHelper(const QCborValue &v)
Definition qjson_p.h:174
static QCborContainerPrivate * container(const QCborValue &v)
Definition qjson_p.h:175
static Q_CORE_EXPORT qint64 concreteInt(QJsonValueConstRef self, qint64 defaultValue, bool clamp) noexcept Q_DECL_PURE_FUNCTION
static Q_CORE_EXPORT bool concreteBool(QJsonValueConstRef self, bool defaultValue) noexcept Q_DECL_PURE_FUNCTION
static Q_CORE_EXPORT QJsonValue::Type concreteType(QJsonValueConstRef self) noexcept Q_DECL_PURE_FUNCTION
static Q_CORE_EXPORT QJsonValue concrete(QJsonValueConstRef self) noexcept
static Q_CORE_EXPORT double concreteDouble(QJsonValueConstRef self, double defaultValue) noexcept Q_DECL_PURE_FUNCTION
Q_CORE_EXPORT QJsonArray toArray() const
QString objectKey() const
Definition qjsonvalue.h:185
Q_CORE_EXPORT QVariant toVariant() const
static Q_CORE_EXPORT QString concreteString(QJsonValueConstRef self, const QString &defaultValue)
QCborContainerPrivate * d
Definition qjsonvalue.h:225
Q_CORE_EXPORT QJsonObject toObject() const
\inmodule QtCore \reentrant
\inmodule QtCore\reentrant
Definition qjsonvalue.h:25
void swap(QJsonValue &other) noexcept
QJsonValue(Type=Null)
Creates a QJsonValue of type type.
friend class QJsonObject
Definition qjsonvalue.h:110
QJsonValue & operator=(const QJsonValue &other) noexcept
Assigns the value stored in other to this object.
int toInt(int defaultValue=0) const
friend class QJsonArray
Definition qjsonvalue.h:109
QJsonObject toObject() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
QJsonArray toArray() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
~QJsonValue()
Destroys the value.
double toDouble(double defaultValue=0) const
Converts the value to a double and returns it.
bool toBool(bool defaultValue=false) const
Converts the value to a bool and returns it.
static QJsonValue fromVariant(const QVariant &variant)
Converts variant to a QJsonValue and returns it.
bool isArray() const
Returns true if the value contains an array.
Definition qjsonvalue.h:76
Type type() const
Returns the type of the value.
QString toString() const
Converts the value to a QString and returns it.
bool isObject() const
Returns true if the value contains an object.
Definition qjsonvalue.h:77
const QJsonValue operator[](const QString &key) const
Returns a QJsonValue representing the value for the key key.
QVariant toVariant() const
Converts the value to a \l {QVariant::}{QVariant()}.
Type
This enum describes the type of the JSON value.
Definition qjsonvalue.h:27
qint64 toInteger(qint64 defaultValue=0) const
const_reference at(qsizetype i) const noexcept
Definition qlist.h:446
int id(int=0) const
Definition qmetatype.h:475
\inmodule QtCore
Definition qstringview.h:78
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:6018
@ FullyEncoded
Definition qurl.h:129
QString toString(FormattingOptions options=FormattingOptions(PrettyDecoded)) const
Returns a string representation of the URL.
Definition qurl.cpp:2831
@ WithoutBraces
Definition quuid.h:54
QString toString(StringFormat mode=WithBraces) const
Definition quuid.cpp:650
\inmodule QtCore
Definition qvariant.h:65
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,...
QString toString() const
Returns the variant as a QString if the variant has a userType() including, but not limited to:
bool toBool() const
Returns the variant as a bool if the variant has userType() Bool.
QJsonArray toJsonArray() const
QHash< QString, QVariant > toHash() const
Returns the variant as a QHash<QString, QVariant> if the variant has type() \l QMetaType::QVariantHas...
QJsonDocument toJsonDocument() const
QJsonObject toJsonObject() const
static auto fromValue(T &&value) noexcept(std::is_nothrow_copy_constructible_v< T > &&Private::CanUseInternalSpace< T >) -> std::enable_if_t< std::conjunction_v< std::is_copy_constructible< T >, std::is_destructible< T > >, QVariant >
Definition qvariant.h:536
QUuid toUuid() const
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,...
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 ...
Combined button and popup list for selecting options.
static jboolean copy(JNIEnv *, jobject)
#define Q_FALLTHROUGH()
EGLStreamKHR stream
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
bool comparesEqual(const QJsonValue &lhs, const QJsonValue &rhs) noexcept
QDataStream & operator>>(QDataStream &stream, QJsonValue &v)
static QJsonValueRef & assignToRef(QJsonValueRef &ref, const QCborValue &value, bool is_object)
QDebug operator<<(QDebug dbg, const QJsonValue &o)
static QCborValue doubleValueHelper(double v)
static QT_BEGIN_NAMESPACE QJsonValue::Type convertFromCborType(QCborValue::Type type) noexcept
size_t qHash(const QJsonValue &value, size_t seed)
return ret
static Q_DECL_CONST_FUNCTION bool qt_is_finite(double d)
Definition qnumeric_p.h:117
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLint GLint GLint GLint GLint x
[0]
GLuint64 key
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint index
[2]
GLenum type
GLfloat GLfloat clamp
GLint ref
GLfloat n
GLdouble s
[6]
Definition qopenglext.h:235
GLuint GLfloat * val
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
Definition qrandom.cpp:196
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static const QTextHtmlElement elements[Html_NumElements]
ptrdiff_t qsizetype
Definition qtypes.h:165
long long qint64
Definition qtypes.h:60
unsigned char quint8
Definition qtypes.h:46
QVariant variant
[1]
QCborValue(QCborTag(2), QByteArray("\x01\0\0\0\0\0\0\0\0", 9))
[0]
QSharedPointer< T > other(t)
[5]
this swap(other)
QCborValue::Type type
Definition moc.h:23