QCborValue Class
QCborValue 类封装了一个 CBOR 格式的值。更多内容...
| 头文件: | #include <QCborValue> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 所有成员的列表,包括继承的成员
- QCborValue 是Qt 中 CBOR 支持的一部分。
注意:该类中的所有函数均为可重入函数。
QCborValue 比较
| 类别 | 可比较类型 |
|---|---|
| strong | QCborValue |
公共类型
| enum | DiagnosticNotationOption { Compact, LineWrapped, ExtendedFormat } |
| flags | DiagnosticNotationOptions |
| enum | EncodingOption { NoTransformation, UseFloat, UseFloat16, UseIntegers } |
| flags | EncodingOptions |
| enum | Type { Integer, ByteArray, String, Array, Map, …, Uuid } |
公共函数
| QCborValue() | |
| QCborValue(QCborArray &&a) | |
| QCborValue(QCborMap &&m) | |
| QCborValue(QCborSimpleType st) | |
| QCborValue(QCborValue::Type t_) | |
| QCborValue(QStringView s) | |
| QCborValue(bool b) | |
| QCborValue(const QByteArray &ba) | |
| QCborValue(const QCborArray &a) | |
| QCborValue(const QCborMap &m) | |
| QCborValue(const QDateTime &dt) | |
| QCborValue(const QRegularExpression &rx) | |
| QCborValue(const QString &s) | |
| QCborValue(const QUrl &url) | |
| QCborValue(const QUuid &uuid) | |
| QCborValue(const void *) | |
| QCborValue(double d) | |
| QCborValue(qint64 i) | |
| QCborValue(std::nullptr_t) | |
| QCborValue(QCborKnownTags tag, const QCborValue &tv = QCborValue()) | |
| QCborValue(QCborTag tag, const QCborValue &tv = QCborValue()) | |
| QCborValue(QLatin1StringView s) | |
| QCborValue(const QCborValue &other) | |
| QCborValue(QCborValue &&other) | |
| ~QCborValue() | |
| int | compare(const QCborValue &other) const |
| bool | isArray() const |
| bool | isBool() const |
| bool | isByteArray() const |
| bool | isContainer() const |
| bool | isDateTime() const |
| bool | isDouble() const |
| bool | isFalse() const |
| bool | isInteger() const |
| bool | isInvalid() const |
| bool | isMap() const |
| bool | isNull() const |
| bool | isRegularExpression() const |
| bool | isSimpleType() const |
| bool | isSimpleType(QCborSimpleType st) const |
| bool | isString() const |
| bool | isTag() const |
| bool | isTrue() const |
| bool | isUndefined() const |
| bool | isUrl() const |
| bool | isUuid() const |
| void | swap(QCborValue &other) |
| QCborTag | tag(QCborTag defaultValue = QCborTag(-1)) const |
| QCborValue | taggedValue(const QCborValue &defaultValue = QCborValue()) const |
| QCborArray | toArray() const |
| QCborArray | toArray(const QCborArray &defaultValue) const |
| bool | toBool(bool defaultValue = false) const |
| QByteArray | toByteArray(const QByteArray &defaultValue = {}) const |
| QByteArray | toCbor(QCborValue::EncodingOptions opt = NoTransformation) const |
| void | toCbor(QCborStreamWriter &writer, QCborValue::EncodingOptions opt = NoTransformation) const |
| QDateTime | toDateTime(const QDateTime &defaultValue = {}) const |
| QString | toDiagnosticNotation(QCborValue::DiagnosticNotationOptions opts = Compact) const |
| double | toDouble(double defaultValue = 0) const |
| qint64 | toInteger(qint64 defaultValue = 0) const |
| QJsonValue | toJsonValue() const |
| QCborMap | toMap() const |
| QCborMap | toMap(const QCborMap &defaultValue) const |
| QRegularExpression | toRegularExpression(const QRegularExpression &defaultValue = {}) const |
| QCborSimpleType | toSimpleType(QCborSimpleType defaultValue = QCborSimpleType::Undefined) const |
| QString | toString(const QString &defaultValue = {}) const |
(since 6.10) QAnyStringView | toStringView(QAnyStringView defaultValue = {}) const |
| QUrl | toUrl(const QUrl &defaultValue = {}) const |
| QUuid | toUuid(const QUuid &defaultValue = {}) const |
| QVariant | toVariant() const |
| QCborValue::Type | type() const |
| QCborValue & | operator=(const QCborValue &other) |
| QCborValue & | operator=(QCborValue &&other) |
| QCborValueRef | operator[](const QString &key) |
| const QCborValue | operator[](const QString &key) const |
| QCborValueRef | operator[](QLatin1StringView key) |
| QCborValueRef | operator[](qint64 key) |
| const QCborValue | operator[](QLatin1StringView key) const |
| const QCborValue | operator[](qint64 key) const |
静态公共成员
| QCborValue | fromCbor(QCborStreamReader &reader) |
| QCborValue | fromCbor(const QByteArray &ba, QCborParserError *error = nullptr) |
| QCborValue | fromCbor(const char *data, qsizetype len, QCborParserError *error = nullptr) |
| QCborValue | fromCbor(const quint8 *data, qsizetype len, QCborParserError *error = nullptr) |
| QCborValue | fromJsonValue(const QJsonValue &v) |
| QCborValue | fromVariant(const QVariant &variant) |
相关的非成员
| bool | operator!=(const QCborValue &lhs, const QCborValue &rhs) |
| bool | operator<(const QCborValue &lhs, const QCborValue &rhs) |
| bool | operator<=(const QCborValue &lhs, const QCborValue &rhs) |
| bool | operator==(const QCborValue &lhs, const QCborValue &rhs) |
| bool | operator>(const QCborValue &lhs, const QCborValue &rhs) |
| bool | operator>=(const QCborValue &lhs, const QCborValue &rhs) |
详细说明
该类可用于存储 CBOR 中提供的多种类型之一。 CBOR 即“简洁二进制对象表示法”(Concise Binary Object Representation),是一种非常紧凑的二进制数据编码格式,是 JSON 的超集。它由 IETF 受限 RESTful 环境(CoRE)工作组创建,该工作组已在许多新的 RFC 中采用了该格式。它旨在与CoAP 协议配合使用。
CBOR 包含三类内置类型:
- 基本类型:整数、浮点数(双精度)、布尔值、空值等。
- 字符串类类型:字符串和字节数组
- 容器:数组和映射
此外,CBOR 还支持一种类型可扩展性机制:通过将“标签”与上述类型之一关联,以传递更多信息。例如,一个 UUID 由一个标签和一个包含 16 字节 UUID 内容的字节数组表示。 QCborValue 支持直接使用 Qt 类(如QUuid )创建和解码其中几种扩展类型。
完整的列表请参见QCborValue::Type 。可以使用type() 或“isXxxx”函数之一查询 QCborValue 的类型。
扩展类型和带标签的值
带标签的值是一个普通的 QCborValue,它与一个作为其标签的数字配对。有关 API 中有哪些标签以及完整的官方列表的更多信息,请参阅QCborKnownTags 。此类组合构成了扩展类型。
QCborValue 在 API 中支持某些扩展类型,例如 URL(通过QUrl )和 UUID(通过QUuid )。API 中未支持的其他扩展类型则由Tag 类型的 QCborValue 表示。标签可通过tag() 获取,而带标签的值可通过taggedValue() 获取。
为了确保未来的兼容性,包含扩展 Qt 类型的 QCborValue 与内容相同的标签类型在比较时被视为相等。换言之,以下表达式为真:
QCborValue(uuid) == QCborValue(QCborKnownTags::Uuid, uuid.toRfc4122());未定义值和空值
QCborValue 可以包含“null”值,该值不属于任何特定类型。它类似于 C++ 中的 `std::nullptr_t ` 类型,其唯一可能的值是 `nullptr`。QCborValue 提供了一个接受此类参数的构造函数,用于创建一个 null 类型的 QCborValue。
空值用于表示可选值不存在。从这一方面来看,它类似于 C++ 标准库中未初始化的std::optional 类型。与 C++ 类型不同,CBOR 空值仅为“Null”类型,无法确定它所替代的具体类型。
QCborValue 还可以具有“未定义”类型,该类型表示“未定义”的值。事实上,这就是 QCborValue 默认构造函数所创建的内容。
未定义值与空值不同。空值用于表示未提供的可选值,而“未定义”通常用于表示预期值无法提供,这通常是由于错误或先决条件无法满足所致。
此类值完全有效,并且可能会出现在CBOR流中,这与JSON内容以及QJsonValue 的undefined位不同。但与QJsonValue 中的Undefined类似,当查询无效时(对于QCborArray ,索引超出范围;对于QCborMap ,未找到键),CBOR容器的value()或只读操作符[]会返回该值。 无法将此类情况与 `Undefined` 的值区分开来,因此如果需要区分,请检查 `QCborArray ` 的大小并使用 `QCborMap ` 迭代器 API。
简单类型
CBOR 支持其他简单类型,这些类型与 Null 和 Undefined 一样,不包含其他值。它们可互换地称为“简单类型”和“简单值”。CBOR 将布尔值编码为两种不同的类型(一种用于true ,另一种用于false ),但 QCborValue 为它们提供了一个便捷的 API。
目前尚未定义其他 CBOR 简单类型。QCborValue 仅通过其编号来支持这些类型,并提供了isSimpleType() 和toSimpleType() 等 API,以便在 Qt API 更新之前与未来规范保持兼容。在相关规范发布之前,不建议使用这些类型,因为其他 CBOR 实现可能无法完全支持它们。
CBOR 支持
QCborValue 支持创建规范流和严格流所需的所有 CBOR 功能。它实现了RFC 7049 中规定的几乎所有功能。
下表列出了 QCborValue 支持的 CBOR 功能。
| 功能 | 支持 |
|---|---|
| 无符号数 | 是(qint64 范围) |
| 负数 | 是(qint64 范围) |
| 字节字符串 | 是 |
| 文本字符串 | 是 |
| 分块字符串 | 见下文 |
| 标签 | 是(任意) |
| 布尔值 | 是 |
| Null | 是 |
| 未定义 | 是 |
| 任意简单值 | 是 |
| 半精度浮点数(16 位) | 是 |
| 单精度浮点数(32 位) | 是 |
| 双精度浮点数(64 位) | 是 |
| 无穷大与NaN浮点数 | 是 |
| 确定长度的数组和映射 | 是 |
| 不定长数组和映射 | 是 |
| 除字符串和整数以外的映射键类型 | 是(任意) |
QCborValue中的整数仅限于qint64 类型的取值范围。 即从 -9,223,372,036,854,775,808 (-263) 到 9,223,372,036,854,775,807 (263- 1)。CBOR 本身可以表示超出此范围的整数值,而 QCborValue 不支持这些值。当使用 `fromCbor()` 解码包含此类值之一的流时,QCborValue 会自动将其转换为 `Double`,但此过程可能会损失多达 11 位的精度。
fromCbor() 能够解码分块字符串,但会将所有分块合并为单个 QCborValue。因此,在使用toCbor() 时,它始终写入非分块字符串(这本就是 Canonical 格式的要求)。
QCborValue 会将 CBOR 流中的半精度和单精度浮点数值统一转换为双精度。toCbor() 函数可接受一个参数,用于指示重新生成这些数值。
QCborValueRef
QCborValueRef 是QCborArray 和QCborMap 的辅助类。当使用上述类中的可变 API 时,返回的便是该类型。与 QCborValue 不同,该类可被赋予新值。完成赋值后,其引用的数组或映射将根据新值进行修改。 在所有其他方面,其 API 与 QCborValue 完全相同。
另请参阅 QCborArray 、QCborMap 、QCborStreamReader 、QCborStreamWriter 、QJsonValue 、QJsonDocument 、序列化转换器以及解析和显示 CBOR 数据。
成员类型文档
enum QCborValue::DiagnosticNotationOption
flags QCborValue::DiagnosticNotationOptions
此枚举用于toDiagnosticNotation() 函数的 option 参数中,用于修改输出格式。
| 常量 | 值 | 描述 |
|---|---|---|
QCborValue::Compact | 0x00 | 不使用任何换行符,生成紧凑的表示形式。 |
QCborValue::LineWrapped | 0x01 | 使用换行符,每行一个QCborValue 。 |
QCborValue::ExtendedFormat | 0x02 | 使用一些 RFC 7049 中未提供的不同选项来表示值。这些选项可能会发生变化。 |
目前,ExtendedFormat 会改变字节数组的表示方式。若不使用该选项,字节数组始终采用带空格的十六进制编码;若启用该选项,QCborValue::toCbor() 将根据上下文,使用带空格的十六进制、Base64 或 Base64URL 编码。
DiagnosticNotationOptions 类型是QFlags<DiagnosticNotationOption> 的 typedef。它存储 DiagnosticNotationOption 值的按“或”运算组合。
另请参阅 toDiagnosticNotation()。
enum QCborValue::EncodingOption
flags QCborValue::EncodingOptions
该枚举用于toCbor() 方法的 options 参数中,用于修改编码器的行为。
| 常量 | 值 | 描述 |
|---|---|---|
QCborValue::NoTransformation | 0 | (默认)不执行任何转换。 |
QCborValue::UseFloat | 0x02 | 指示编码器在可能的情况下使用 IEEE 754 单精度浮点(即float )。 |
QCborValue::UseFloat16 | UseFloat | 0x04 | 指示编码器在可能的情况下使用 IEEE 754 半精度浮点数(即qfloat16 )。这意味着UseFloat 。 |
QCborValue::UseIntegers | 0x08 | 指示编码器在Double 类型的值包含整数时,应使用整数。 |
使用UseFloat16 是将流编码为规范格式的必要条件,但在其他情况下并非必需。
EncodingOptions 类型是QFlags<EncodingOption> 的 typedef。它存储 EncodingOption 值的按“或”运算组合。
另请参阅 toCbor()。
enum QCborValue::Type
该枚举表示QCborValue 类型。它由type()函数返回。
CBOR的内置类型包括:
| 常量 | 值 | 描述 |
|---|---|---|
QCborValue::Integer | 0x00 | qint64:一个整数值 |
QCborValue::ByteArray | 0x40 | QByteArray:字节数组(“字节串”) |
QCborValue::String | 0x60 | QString: 一个 Unicode 字符串(“文本字符串”) |
QCborValue::Array | 0x80 | QCborArray: 一个 QCborValues 数组 |
QCborValue::Map | 0xa0 | QCborMap: 一个包含 QCborValues 的关联容器 |
QCborValue::SimpleType | 0x100 | QCborSimpleType: 几种简单类型/值之一 |
QCborValue::False | SimpleType + int(QCborSimpleType::False) | bool: 值的简单类型false |
QCborValue::True | SimpleType + int(QCborSimpleType::True) | bool: 值的简单类型true |
QCborValue::Null | SimpleType + int(QCborSimpleType::Null) | std::nullptr_t: 空值的简单类型 |
QCborValue::Undefined | SimpleType + int(QCborSimpleType::Undefined) | (无类型)未定义值的简单类型 |
QCborValue::Double | 0x202 | double: 双精度浮点数 |
QCborValue::Invalid | -1 | 不是有效值,这通常表示 CBOR 解码错误 |
此外,QCborValue 还可以表示扩展类型:
| 常量 | 值 | 描述 |
|---|---|---|
QCborValue::Tag | 0xc0 | 未知或无法识别的扩展类型,由其标签(QCborTag )和带标签的值(QCborValue )表示 |
QCborValue::DateTime | 0x10000 | QDateTime:日期和时间戳 |
QCborValue::Url | 0x10020 | QUrl:一个 URL 或 URI |
QCborValue::RegularExpression | 0x10023 | QRegularExpression: 正则表达式的模式 |
QCborValue::Uuid | 0x10025 | QUuid:一个 UUID |
另请参阅 type()。
成员函数文档
QCborValue::QCborValue()
创建一个类型为Undefined 的QCborValue。
CBOR中的未定义值用于指示信息缺失,通常是由于先前操作未按预期完成所致。QCborArray 和QCborMap API 也会使用这些值来表示未找到所搜索的项目。
未定义值由Undefined simple type 表示。因此,包含未定义值的QCborValue在调用isSimpleType()和isSimpleType(QCborSimpleType::Undefined) 时也会返回true。
未定义值与 null 值不同。
包含未定义值的 QCborValue 对象也不同于无效的 QCborValue 对象。API 不会创建无效的 QCborValue,但它们可能因解析错误而存在。
另请参阅 isUndefined()、isNull() 和isSimpleType()。
QCborValue::QCborValue(QCborArray &&a)
QCborValue::QCborValue(const QCborArray &a)
使用数组a 创建一个QCborValue 。该数组稍后可通过toArray() 获取。
另请参阅 toArray()、isArray() 和isMap()。
创建一个包含映射m 的QCborValue 。该映射稍后可通过toMap() 进行检索。
另请参阅 toMap()、isMap() 和isArray()。
QCborValue::QCborValue(QCborSimpleType st)
创建一个简单类型为st 的QCborValue。该类型随后可通过toSimpleType()以及isSimpleType(st)获取。
CBOR 简单类型是指不具有任何关联值的类型,例如 C++ 中的std::nullptr_t 类型,其唯一可能的值是nullptr 。
如果st 为QCborSimpleType::Null ,则生成的 QCborValue 将为Null 类型;同理,对于QCborSimpleType::Undefined 也是如此。如果st 为QCborSimpleType::False 或QCborSimpleType::True ,则创建的 QCborValue 将是一个布尔值,分别包含 false 或 true。
该函数可用于 API 中未定义的简单类型。例如,要创建一个类型为 12 的 QCborValue,可以这样写:
QCborValue value(QCborSimpleType(12));在相关规范发布之前,不应使用简单类型,因为其他实现可能无法正确支持它们。简单类型值 24 至 31 已被保留,严禁使用。
isSimpleType(),isNull(),isUndefined(),isTrue(),isFalse()
QCborValue::QCborValue(QCborValue::Type t_)
创建一个类型为t_ 的QCborValue。与此类型关联的值(如有)将通过默认构造函数初始化。
另请参阅 type()。
QCborValue::QCborValue(QStringView s)
创建一个值为字符串s 的QCborValue对象。该值稍后可通过toString()方法获取。
另请参阅 toString()、isString() 和isByteArray()。
QCborValue::QCborValue(bool b)
创建一个布尔值为b 的QCborValue。该值随后可通过toBool()获取。
在内部,CBOR 布尔值由一对类型表示,一个表示 true,另一个表示 false。因此,布尔型 QCborValue 在调用isSimpleType() 时将返回 true,而在调用isSimpleType(QCborSimpleType::False) 或isSimpleType(QCborSimpleType::True) 时将返回其中之一。
另请参阅 toBool()、isBool()、isTrue()、isFalse() 以及isSimpleType()。
QCborValue::QCborValue(const QByteArray &ba)
创建一个 QCborValue 对象,其值为字节数组ba 。该值随后可通过toByteArray() 方法获取。
另请参阅 toByteArray()、isByteArray() 和isString()。
[explicit] QCborValue::QCborValue(const QDateTime &dt)
创建一个日期/时间扩展类型的 QCborValue 对象,其中包含由dt 表示的值。该值随后可通过toDateTime() 获取。
CBOR 日期/时间类型是使用标签的扩展类型:要么是标记为DateTime 的字符串(采用 ISO 日期格式),要么是标记为UnixTime_t 的数字(自 1970 年起算的秒数,UTC 时区)。在解析 CBOR 流时,QCborValue 会将UnixTime_t 转换为基于字符串的类型。
另请参阅 toDateTime()、isDateTime() 和taggedValue()。
[explicit] QCborValue::QCborValue(const QRegularExpression &rx)
创建一个 QCborValue 对象,该对象属于正则表达式模式扩展类型,并包含由rx 表示的值。该值随后可通过toRegularExpression() 进行检索。
CBOR 正则表达式类型是一种扩展类型,由标记为RegularExpression 的字符串表示。请注意,CBOR 正则表达式仅存储模式,因此QRegularExpression 对象可能携带的任何标志都会丢失。
另请参阅 toRegularExpression()、isRegularExpression() 和taggedValue()。
QCborValue::QCborValue(const QString &s)
创建一个值为“s ”的QCborValue对象。该值稍后可通过toString()方法获取。
另请参阅 toString()、isString() 和isByteArray()。
[explicit] QCborValue::QCborValue(const QUrl &url)
创建一个 URL 扩展类型的 QCborValue 对象,其中包含由url 表示的值。该值随后可通过toUrl() 获取。
CBOR URL 类型是一种扩展类型,由标记为Url 的字符串表示。
另请参阅 toUrl()、isUrl() 和taggedValue()。
[explicit] QCborValue::QCborValue(const QUuid &uuid)
创建一个QCborValue对象,该对象属于UUID扩展类型,并包含由uuid 表示的值。该值随后可通过toUuid()获取。
CBOR UUID 类型是一种扩展类型,由一个标记为Uuid 的字节数组表示。
另请参阅 toUuid()、isUuid() 和taggedValue()。
[delete] QCborValue::QCborValue(const void *)
默认构造一个QCborValue 的实例。该函数已被删除。
QCborValue::QCborValue(double d)
创建一个浮点值d 的QCborValue对象。该值稍后可通过toDouble()方法获取。
CBOR 浮点数与整数有所不同。因此,包含整数的 QCborValue 对象与包含浮点数的 QCborValue 对象在比较时会产生不同结果,即使这两个对象所包含的数值是相等的。
另请参阅 toDouble()、isDouble() 和isInteger()。
QCborValue::QCborValue(qint64 i)
创建一个整数值为i 的QCborValue对象。该值稍后可通过toInteger()方法获取。
CBOR 整数值与浮点数值不同。因此,即使对象中包含的值相等,包含整数的 QCborValue 对象与包含浮点数的 QCborValue 对象在比较时也会产生不同的结果。
另请参阅 toInteger()、isInteger() 和isDouble()。
QCborValue::QCborValue(std::nullptr_t)
创建一个类型为Null 的QCborValue对象。
CBOR 空值用于表示未提供的可选值。它们与未定义值不同,因为空值通常并非先前错误或问题的结果。
另请参阅 isNull()、isUndefined() 和isSimpleType()。
QCborValue::QCborValue(QCborKnownTags tag, const QCborValue &tv = QCborValue())
QCborValue::QCborValue(QCborTag tag, const QCborValue &tv = QCborValue())
为由标签值tag 和标记值tv 所表示的扩展类型创建一个QCborValue 。之后可通过tag() 检索该标签,并通过taggedValue() 检索被标记的值。
另请参阅 isTag()、tag()、taggedValue() 以及QCborKnownTags 。
QCborValue::QCborValue(QLatin1StringView s)
创建一个 QCborValue 对象,其中包含由s 解析的 Latin-1 字符串。该值随后可通过toString() 获取。
这是一个重载函数。
另请参阅 toString()、isString() 和isByteArray()。
[noexcept] QCborValue::QCborValue(const QCborValue &other)
将other 中的内容复制到此对象中。
[noexcept] QCborValue::QCborValue(QCborValue &&other)
将other 中的QCborValue对象的内容移入该对象,并释放该对象的资源。
这是一个重载函数。
[noexcept] QCborValue::~QCborValue()
销毁当前的QCborValue 对象,并释放所有相关资源。
int QCborValue::compare(const QCborValue &other) const
将该值与other 进行比较,并返回一个整数,该整数表示该值应在(若结果为负数)other 之前排序,还是在(若结果为正数) 之后排序。如果该函数返回0,则表示这两个值相等且内容相同。
如果每个QCborValue 包含数组或映射,则会递归地对其中的元素进行比较。
扩展类型
QCborValue 会将包含扩展类型的 `QCborValue `(如 `Url ` 和 `Url ` 及其等效的带标签表示形式)视为相等。因此,例如以下表达式为真:
QCborValue(QUrl("https://example.com")) == QCborValue(QCborKnownTags::Url, "https://example.com");请注意,QUrl 和QDateTime 等 Qt 类型会对参数进行规范化或其他修改。上述表达式之所以为真,仅仅是因为右侧的字符串是左侧QCborValue 所采用的规范化值。例如,如果双方的“https”部分均为大写,则比较将失败。 有关QCborValue 执行的标准化处理,请查阅相关 Qt 类型的构造函数文档。
排序顺序
CBOR 中的排序顺序在RFC 7049 第 3.9 节中定义,该节讨论了遵循规范编码时映射中键的排序。根据规范,“排序是基于键数据项表示形式的字节进行的”,并列出了以下结果:
- “如果两个键的长度不同,较短的键排序优先;”
- “如果两个键的长度相同,则(按字节顺序)字面顺序值较小的那个排序在前。”
这导致 QCborValues 的排序结果出人意料,该函数的返回结果与后续通过比较所含元素所获得的结果不同。 例如,包含字符串“zzz”的QCborValue 在排序时会排在包含字符串“foobar”的QCborValue 之前,尽管当按QStrings 或QByteArrays 进行比较时,“zzz”在字典顺序中排在“foobar”之后。
规范并未明确说明对不同类型的值应采用何种排序顺序(规范中提到排序不应“关注主要类型的 3/5 位划分”)。QCborValue 假设类型也应被排序。QCborValue::Type 枚举的数值按该顺序排列,但扩展类型除外,它们的比较依据与其带标签的等效类型相同。
注意:排序 顺序尚属初步,可能会有变动。目前,应用程序不应依赖此函数返回的顺序。
另请参阅 QCborArray::compare()、QCborMap::compare() 和operator==()。
[static] QCborValue QCborValue::fromCbor(QCborStreamReader &reader)
从位于 `reader ` 中的 CBOR 流中解码一个项,并返回其等效表示形式。该函数是递归的:如果该项是一个映射或数组,它将解码该映射或数组中找到的所有项,直到最外层对象处理完毕。
此函数无需用于QCborStreamReader 的根元素。例如,以下代码演示了如何跳过文件开头的CBOR签名标签:
if (reader.isTag() && reader.toTag() == QCborKnownTags::Signature)
reader.next();
QCborValue contents = QCborValue::fromCbor(reader);即使解码失败,返回值也可能部分完整,且与有效的QCborValue 无法区分。要确定是否发生错误,请检查reader.lastError()是否指示了错误状态。该函数在遇到第一个错误后会立即停止解码。
另请参阅 toCbor()、toDiagnosticNotation()、toVariant() 和toJsonValue()。
[static] QCborValue QCborValue::fromCbor(const QByteArray &ba, QCborParserError *error = nullptr)
从字节数组ba 中找到的CBOR流中解码一个项,并返回其等效表示形式。该函数是递归的:如果该项是一个映射或数组,它将解码该映射或数组中找到的所有项,直到最外层的对象处理完毕。
如果发生错误,该函数会将错误状态(如有)及其发生位置的偏移量存储在error 所指向的对象中。如果未发生错误,则将NoError 存储在错误状态中,并记录已消耗的字节数(即存储第一个未使用的字节的偏移量)。 利用这些信息,可以解析同一字节数组中可能存在的后续数据。
即使解码失败,返回值也可能不完整,且与有效的QCborValue 无法区分。要确定是否发生错误,请检查error 中是否存储了错误信息。该函数在出现第一个错误后会立即停止解码。
这是一个重载函数。
另请参阅 toCbor()、toDiagnosticNotation()、toVariant() 和toJsonValue()。
[static] QCborValue QCborValue::fromCbor(const char *data, qsizetype len, QCborParserError *error = nullptr)
[static] QCborValue QCborValue::fromCbor(const quint8 *data, qsizetype len, QCborParserError *error = nullptr)
将len 字节的data 转换为QByteArray ,然后调用该函数的那个接受QByteArray 作为参数的重载版本,同时若提供了error ,也会将其一并传递。
[static] QCborValue QCborValue::fromJsonValue(const QJsonValue &v)
将v 中包含的JSON值转换为相应的CBOR值并返回。从JSON转换为CBOR不会造成数据丢失,因为CBOR的类型集比JSON更丰富。此外,使用此函数转换为CBOR的值,可通过toJsonValue()函数无损地转换回JSON。
下表列出了 JSON 类型与 CBOR 类型的映射关系:
| JSON 类型 | CBOR 类型 |
|---|---|
| Bool | Bool |
| Number | 整数(如果该数值没有小数部分且在qint64 范围内)或双精度浮点数 |
| 字符串 | 字符串 |
| 数组 | 数组 |
| 对象 | Map |
| Null | Null |
QJsonValue 也可能为未定义,这表示之前某项操作未能完成(例如,搜索了对象中不存在的键)。未定义值不属于 JSON 类型,且不得出现在 JSON 数组和对象中,但如果相应的QJsonValue 为未定义,则该函数会返回QCborValue 中的未定义值。
另请参阅 toJsonValue()、fromVariant()、QCborArray::fromJsonArray() 和QCborMap::fromJsonObject()。
[static] QCborValue QCborValue::fromVariant(const QVariant &variant)
将QVariant variant 转换为QCborValue 并返回该值。
QVariant 可能包含大量不同的元类型,其中许多在 CBOR 中没有相应的表示形式。这包括所有用户定义的元类型。在使用 CBOR 准备传输时,建议仔细编码每个值,以防止表示形式的丢失。
下表列出了该函数将执行的转换:
| Qt (C++) 类型 | CBOR 类型 |
|---|---|
| 无效 (QVariant()) | 未定义 |
bool | Bool |
std::nullptr_t | 空 |
short、ushort 、int 、uint 、qint64 | 整数 |
| quint64 | 整数,若超出 qint64 的范围则为双精度 |
float的范围,则为 Double,double | Double |
| QByteArray | ByteArray |
| QDateTime | DateTime |
| QCborSimpleType | 简单类型 |
| QJsonArray | 数组,使用 QCborArray::formJsonArray() 进行转换 |
| QJsonDocument | 数组或映射 |
| QJsonObject | Map,通过QCborMap::fromJsonObject()转换 |
| QJsonValue | 使用fromJsonValue()转换 |
| QRegularExpression | RegularExpression |
| QString | 字符串 |
| QStringList | 数组 |
| QVariantHash | Map |
| QVariantList | 数组 |
| QVariantMap | Map |
| QUrl | URL |
| QUuid | Uuid |
如果 `QVariant::isNull()` 返回 `true`,则无论 `QVariant` 携带的类型为何,都会返回一个 `null` 的 `QCborValue `,或将其插入到列表或对象中。请注意,Qt 6.0 中影响 `QVariant::isNull()` 的行为变更也会影响此函数。
对于上述未列出的其他类型,系统将尝试将其转换为字符串,通常(但并非总是)通过调用QVariant::toString() 实现。如果转换失败,该值将被替换为未定义的 CBOR 值。请注意,对于大多数类型,QVariant::toString() 也是有损转换。
请注意,通过QVariant::toString() 进行的转换可能会随时发生变化。QVariant 和QCborValue 未来可能会扩展以支持更多类型,这将导致该函数执行转换的方式发生改变。
另请参阅 toVariant()、fromJsonValue()、QCborArray::toVariantList()、QCborMap::toVariantMap() 以及QJsonValue::fromVariant()。
bool QCborValue::isArray() const
如果该QCborValue 属于数组类型,则返回true。可使用toArray()获取数组值。
bool QCborValue::isBool() const
如果该QCborValue 是布尔值,则返回true。可通过toBool()获取该值。
另请参阅 type()、toBool()、isTrue() 以及isFalse()。
bool QCborValue::isByteArray() const
如果该QCborValue 属于字节数组类型,则返回true。可通过toByteArray()获取字节数组值。
另请参阅 type() 和toByteArray()。
bool QCborValue::isContainer() const
如果 `QCborValue ` 是数组或映射,则此便利函数返回 `true`。
bool QCborValue::isDateTime() const
如果该QCborValue 属于日期/时间类型,则返回true。可通过toDateTime()获取该值。日期/时间是使用标签DateTime 的扩展类型。
此外,从 CBOR 流中解码时,QCborValue 会解析值为UnixTime_t 的标签,并将其转换为等效的日期/时间。
另请参阅 type() 和toDateTime()。
bool QCborValue::isDouble() const
如果该QCborValue 属于浮点类型,则返回true。可通过toDouble()获取该值。
bool QCborValue::isFalse() const
如果该QCborValue 是值为false的布尔值,则返回true。该函数的存在是因为,在内部,CBOR布尔值被存储为两种独立的类型,一种表示true,另一种表示false。
另请参阅 type()、isBool()、isTrue(),以及toBool()。
bool QCborValue::isInteger() const
如果该QCborValue 属于整数类型,则返回true。可使用toInteger()获取该整数值。
bool QCborValue::isInvalid() const
如果此QCborValue 不属于任何有效类型,则返回true。无效的QCborValues与值未定义的情况不同,通常表示解码错误。
另请参阅 isUndefined() 和isNull()。
bool QCborValue::isMap() const
如果该QCborValue 属于map类型,则返回true。可使用toMap()获取map的值。
bool QCborValue::isNull() const
如果该QCborValue 为null类型,则返回true。
CBOR 空值用于表示未提供的可选值。它们与未定义值不同,因为空值通常并非先前错误或问题所致。
空值既不同于未定义值,也不同于无效的QCborValue 对象。API 不会创建无效的 QCborValues,但它们可能因解析错误而存在。
另请参阅 type()、isUndefined() 和isInvalid()。
bool QCborValue::isRegularExpression() const
如果该QCborValue 包含正则表达式的模式,则返回true。该模式可通过toRegularExpression()获取。
另请参阅 type() 和toRegularExpression()。
bool QCborValue::isSimpleType() const
如果该QCborValue 属于CBOR简单类型之一,则返回true。该类型本身稍后可通过type()获取,即使该类型在API中没有对应的枚举项也是如此。此外,还可以使用isSimpleType (QCborSimpleType)重载方法进行检查。
另请参阅 QCborSimpleType 、isSimpleType (QCborSimpleType)和toSimpleType ()。
bool QCborValue::isSimpleType(QCborSimpleType st) const
如果此QCborValue 属于简单类型,且toSimpleType()会返回st ,则返回true;否则返回false。该函数可用于检查任何CBOR简单类型,即使API中未列举该类型。例如,对于值为12的简单类型,可以这样编写:
value.isSimpleType(QCborSimpleType(12));这是一个重载函数。
另请参阅 QCborValue::QCborValue (QCborSimpleType)、isSimpleType()、isFalse()、isTrue()、isNull 、isUndefined() 以及toSimpleType()。
bool QCborValue::isString() const
如果该QCborValue 属于字符串类型,则返回true。可通过toString()获取字符串值。
bool QCborValue::isTag() const
如果该QCborValue 属于标签类型,则返回true。可通过tag()获取标签值,通过taggedValue()获取带标签的值。
对于 API 所识别的扩展类型,此函数也会返回 true。对于在 Qt API 更新以支持扩展类型之前直接处理扩展类型的代码,可以使用taggedValue() 重新创建标签与标记值对。
另请参阅 type()、tag() 和taggedValue()。
bool QCborValue::isTrue() const
如果该QCborValue 是值为true的布尔值,则返回true。该函数的存在是因为,在内部,CBOR布尔值被存储为两种独立的类型,一种代表false,另一种代表true。
另请参阅 type()、isBool()、isFalse() 以及toBool()。
bool QCborValue::isUndefined() const
如果该QCborValue 属于“未定义”类型,则返回true。
CBOR 未定义值用于指示信息缺失,通常是由于先前操作未按预期完成所致。QCborArray 和QCborMap API 也会使用这些值来表示未找到所搜索的项目。
未定义值与空值不同。
QCborValue 包含未定义值的对象也不同于无效的QCborValue 对象。API 不会创建无效的 QCborValues,但它们可能因解析错误而存在。
另请参阅 type()、isNull() 和isInvalid()。
bool QCborValue::isUrl() const
如果该QCborValue 属于URL类型,则返回true。可通过toUrl()获取URL值。
bool QCborValue::isUuid() const
如果该QCborValue 包含一个UUID,则返回true。可通过toUuid()获取该值。
[noexcept] void QCborValue::swap(QCborValue &other)
将该值与other 互换。此操作速度极快,且绝不会失败。
QCborTag QCborValue::tag(QCborTag defaultValue = QCborTag(-1)) const
返回此扩展的QCborValue 对象的标签;如果该对象属于tag类型,则返回其标签;否则返回defaultValue 。
CBOR 通过将一个数字(标签)与存储表示关联起来来表示扩展类型。此函数返回该数字。要检索该表示,请使用taggedValue()。
另请参阅 isTag()、taggedValue()、isDateTime()、isUrl()、isRegularExpression(),以及isUuid()。
QCborValue QCborValue::taggedValue(const QCborValue &defaultValue = QCborValue()) const
返回此扩展QCborValue 对象的带标签值(如果该对象属于标签类型),否则返回defaultValue 。
CBOR 通过将一个数字(标签)与存储表示关联来表示扩展类型。此函数返回该表示。要检索标签,请使用 `tag()`。
另请参阅 isTag()、tag()、isDateTime()、isUrl()、isRegularExpression() 以及isUuid()。
QCborArray QCborValue::toArray() const
QCborArray QCborValue::toArray(const QCborArray &defaultValue) const
如果该QCborValue 存储的是数组类型,则返回该数组的值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为QCborArray 。
另请参阅 isArray()、isByteArray()、isMap()、isContainer() 以及toMap()。
bool QCborValue::toBool(bool defaultValue = false) const
返回此QCborValue 中存储的布尔值(如果该 的类型为布尔型)。否则,返回defaultValue 。
另请参阅 isBool()、isTrue() 和isFalse()。
QByteArray QCborValue::toByteArray(const QByteArray &defaultValue = {}) const
如果该QCborValue 存储的是字节数组,则返回该字节数组的值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为QByteArray 。
另请参阅 isByteArray()、isString() 和toString()。
QByteArray QCborValue::toCbor(QCborValue::EncodingOptions opt = NoTransformation) const
将此QCborValue 对象编码为 CBOR 表示形式,使用opt 中指定的选项,并返回包含该表示形式的字节数组。
除非该QCborValue 对象(若为映射或数组)及其包含的任何项均无效,否则此函数不会失败。API 通常不会产生无效类型,但解码错误可能会导致此类情况。
默认情况下,该函数不对QCborValue 中的值进行任何转换,而是将所有浮点数直接写入为双精度(double )类型。如果指定了UseFloat 选项,对于使用该表示形式不会导致精度损失的任何浮点数,它将使用单精度(float )。这包括无穷大和NaN值。
同样地,如果指定了UseFloat16 ,当转换为半精度(qfloat16 )不会导致精度损失时,该函数将尝试使用半精度浮点数。对于无穷大和NaN,这种情况总是成立的。
如果指定了UseIntegers ,则对于任何包含实际整数的浮点数,该函数将使用整数表示。
另请参阅 fromCbor()、fromVariant() 和fromJsonValue()。
void QCborValue::toCbor(QCborStreamWriter &writer, QCborValue::EncodingOptions opt = NoTransformation) const
将此QCborValue 对象编码为其 CBOR 表示形式,使用opt 中指定的选项,并写入由writer 指定的写入器。多个 QCborValues 可以使用同一个写入器,例如,用于编码较大数组中的不同元素。
除非该QCborValue (若其为映射或数组)本身或其中任何项无效,否则此函数不会失败。API 通常不会产生无效类型,但解码错误可能会导致此类情况。
默认情况下,该函数不对QCborValue 中的值进行任何转换,而是将所有浮点数直接写入为双精度(binary64)类型。如果指定了UseFloat 选项,则对于使用该表示形式不会导致精度损失的任何浮点数,将使用单精度(binary32)表示。 这包括无穷大值和NaN值。
同样地,如果指定了UseFloat16 ,当转换为半精度(binary16)浮点数不会导致精度损失时,该函数将尝试使用半精度(binary16)浮点数。对于无穷大值和 NaN 值,这种情况总是成立的。
如果指定了UseIntegers ,则对于包含实际整数的任何浮点数,该函数将使用整数表示。
这是一个重载函数。
另请参阅 fromCbor()、fromVariant() 和fromJsonValue()。
QDateTime QCborValue::toDateTime(const QDateTime &defaultValue = {}) const
如果该QCborValue 存储的是日期/时间扩展类型,则返回其中存储的日期/时间值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为QDateTime 。
另请参阅 isDateTime()、isTag() 和taggedValue()。
QString QCborValue::toDiagnosticNotation(QCborValue::DiagnosticNotationOptions opts = Compact) const
创建与该 CBOR 对象等效的诊断标记,并返回该标记。opts 参数用于控制标记的方言。 诊断表示法在调试过程中非常有用,可帮助开发人员理解存储在QCborValue 或CBOR流中的具体值。正因如此,尽管该表示形式具有唯一性且理论上可行,但Qt API并不支持将诊断表示法反向解析回内存格式或CBOR流。
CBOR 诊断表示法由 RFC 7049 的第 6 节规定。它是 CBOR 流的文本表示形式,与 JSON 非常相似,但支持 JSON 中不存在的 CBOR 类型。由ExtendedFormat 标志启用的扩展格式目前出现在某些 IETF 草案中,其格式可能会发生变化。
该函数生成与toCbor()生成的流等效的表示形式,且不包含该函数中提供的任何转换选项。这也意味着,如果对象是通过fromCbor()创建的,则该函数可能不会生成与创建该对象时所用流完全相同的表示形式,因为后者可能已应用了转换。 有关未经转换的高保真流表示法,请参阅cbordump 示例。
另请参阅 toCbor() 和QJsonDocument::toJson()。
double QCborValue::toDouble(double defaultValue = 0) const
如果该QCborValue 中存储的是Double类型的浮点数,则返回该值;如果是Integer类型的整数,则返回转换为Double类型的数值;在其他情况下,返回defaultValue 。
另请参阅 isDouble()、isInteger() 和toInteger()。
qint64 QCborValue::toInteger(qint64 defaultValue = 0) const
如果该QCborValue 中存储的是整数值,则返回该值;如果该值为Double类型,则本函数返回转换为整数的浮点值;在其他任何情况下,则返回defaultValue 。
另请参阅 isInteger()、isDouble() 和toDouble()。
QJsonValue QCborValue::toJsonValue() const
将此QCborValue 对象转换为等效的JSON表示形式,并将其作为QJsonValue 返回。
请注意,CBOR 包含比 JSON 更丰富、更广泛的类型集,因此在此转换过程中可能会丢失部分信息。下表对比了 CBOR 类型与 JSON 类型,并标明了信息是否可能丢失。
| CBOR 类型 | JSON 类型 | 备注 |
|---|---|---|
| Bool | Bool | 不会丢失数据 |
| 双精度 | Number | 无穷大与NaN将被转换为Null;其他值不会丢失数据 |
| 整数 | Number | 如果整数大于253或小于-253,转换时可能会丢失数据。 |
| Null | Null | 不会丢失数据 |
| 未定义 | NullNull | 类型信息丢失 |
| 字符串 | 字符串 | 不可能丢失数据 |
| 字节数组 | 字符串 | 转换为无损编码(如 Base64url),但字符串与字节数组之间的区别将不复存在 |
| 其他简单类型 | 字符串 | 类型信息丢失 |
| 数组 | 数组 | 转换适用于每个包含的值 |
| 映射 | 对象 | 键将转换为字符串;值将根据此表进行转换 |
| 标签和扩展类型 | 特殊 | 标签编号本身将被丢弃,而带标签的值将转换为 JSON |
有关将 CBOR 映射键转换为字符串的信息,请参阅QCborMap::toJsonObject()。
如果该 `QCborValue ` 包含 `undefined` 值,则该函数也将返回一个 `undefined` 的 `QJsonValue `。 请注意,JSON 不支持 undefined 值,而 undefined 的 QJsonValues 是对规范的一种扩展。它们不能保存在QJsonArray 或QJsonObject 中,但可以由函数返回以表示失败。在所有其他情况下,它们与 null 相同。
标签和扩展类型的特殊处理
某些标签会受到特殊处理,并改变被标记值从 CBOR 到 JSON 的转换方式。下表列出了这些特殊情况:
| 标签 | CBOR 类型 | 转换 |
|---|---|---|
| ExpectedBase64url | 字节数组 | 将字节数组编码为 Base64url |
| ExpectedBase64 | 字节数组 | 将字节数组编码为 Base64 |
| ExpectedBase16 | 字节数组 | 将字节数组编码为十六进制 |
| URL | URL 和字符串 | 使用QUrl::toEncoded() 将编码规范化为 URL 的完全编码格式 |
| Uuid | Uuid 和字节数组 | 使用QUuid::toString() 创建字符串表示形式 |
另请参阅 fromJsonValue()、toVariant()、QCborArray::toJsonArray() 以及QCborMap::toJsonObject()。
如果该QCborValue 存储的是映射类型,则返回该映射的值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为QCborMap 。
另请参阅 isMap()、isArray()、isContainer() 和toArray()。
QRegularExpression QCborValue::toRegularExpression(const QRegularExpression &defaultValue = {}) const
如果该QCborValue 存储的是正则表达式模式扩展类型,则返回其中存储的正则表达式值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为QRegularExpression 。
另请参阅 isRegularExpression()、isTag() 和taggedValue()。
QCborSimpleType QCborValue::toSimpleType(QCborSimpleType defaultValue = QCborSimpleType::Undefined) const
如果QCborValue 属于简单类型,则返回其简单类型;如果不是简单类型,则返回defaultValue 。
以下类型属于简单类型,该函数将返回所列值:
| QCborValue::False | QCborSimpleType::False |
| QCborValue::True | QCborSimpleType::True |
| QCborValue::Null | QCborSimpleType::Null |
| QCborValue::Undefined | QCborSimpleType::Undefined |
另请参阅 type()、isSimpleType()、isBool()、isTrue()、isFalse()、isNull(),以及isUndefined()。
QString QCborValue::toString(const QString &defaultValue = {}) const
如果该QCborValue 中存储的是字符串类型,则返回该字符串值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为QString 。
另请参阅 toStringView()、isString()、isByteArray() 和toByteArray()。
[since 6.10] QAnyStringView QCborValue::toStringView(QAnyStringView defaultValue = {}) const
返回存储在此QCborValue 中的字符串值,前提是该值为字符串类型。否则,返回defaultValue 。由于QCborValue 将字符串存储为US-ASCII、UTF-8或UTF-16格式,因此返回的QAnyStringView 可能采用上述任意一种编码。
此函数不会分配内存。返回值的有效期持续到对该对象的下一次非const成员函数调用为止。如果该对象超出作用域,则返回值的有效期持续到对父CBOR对象(映射或数组)的下一次非const成员函数调用为止。
请注意,此函数不会将其他类型转换为 `QString`。
该函数在 Qt 6.10 中引入。
另请参阅 toString()、isString()、isByteArray() 和toByteArray()。
QUrl QCborValue::toUrl(const QUrl &defaultValue = {}) const
如果该QCborValue 存储的是URL扩展类型,则返回其URL值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为 `QUrl`。
另请参阅 isUrl()、isTag() 和taggedValue()。
QUuid QCborValue::toUuid(const QUuid &defaultValue = {}) const
如果该QCborValue 属于UUID扩展类型,则返回其中存储的UUID值;否则,返回defaultValue 。
请注意,此函数不会将其他类型转换为QUuid 。
另请参阅 isUuid()、isTag() 和taggedValue()。
QVariant QCborValue::toVariant() const
将该值转换为原生 Qt 类型,并返回相应的QVariant 。
下表列出了QCborValue types 与Qt meta types 之间的映射关系。
| CBOR 类型 | Qt 或 C++ 类型 | 备注 |
|---|---|---|
| 整数 | qint64 | |
| 双精度 | double | |
| 布尔型 | bool | |
| 空值 | std::nullptr_t | |
| 未定义 | 无类型 (QVariant()) | |
| 字节数组 | QByteArray | |
| 字符串 | QString | |
| 数组 | QVariantList | 递归转换所有值 |
| 映射 | QVariantMap | 键类型将被“字符串化” |
| 其他简单类型 | QCborSimpleType | |
| DateTime | QDateTime | |
| Url | QUrl | |
| RegularExpression | QRegularExpression | |
| Uuid | QUuid | |
| 其他标签 | 特殊 | 该标签将被忽略,其标记的值将使用此函数进行转换 |
请注意,CBOR映射和数组中的值也会使用此函数进行递归转换,并分别存放在QVariantMap 和QVariantList 中。您不会在QVariant中找到QCborMap 和QCborArray 的存储值。
与 CBOR 不同,QVariantMaps 具有字符串键,因此将QCborMap 转换为QVariantMap 时,会涉及将键值“字符串化”的步骤。详情请参阅QCborMap::toJsonObject()。
另请参阅 fromVariant()、toJsonValue()、QCborArray::toVariantList() 以及QCborMap::toVariantMap()。
QCborValue::Type QCborValue::type() const
返回此QCborValue 的类型。该类型也可稍后通过其中一个“isXxx”函数获取。
另请参阅 isInteger()、isByteArray()、isString()、isArray()、isMap()、isTag()、isFalse()、isTrue()、isBool()、isNull()、isUndefined 、isDouble()、isDateTime()、isUrl()、isRegularExpression(),以及isUuid()。
[noexcept] QCborValue &QCborValue::operator=(const QCborValue &other)
将此 QCborObject 的内容替换为other 的副本。
[noexcept] QCborValue &QCborValue::operator=(QCborValue &&other)
将other QCborValue 对象的内容移动到此对象中,并释放此对象的资源。返回对此对象的引用。
这是一个重载函数。
QCborValueRef QCborValue::operator[](const QString &key)
返回一个 QCborValueRef,可用于读取或修改该映射(作为映射)中与给定key 对应的条目。当该QCborValue 为QCborMap 时,此函数等同于该映射上的对应 [] 运算符。
在返回引用之前:如果该QCborValue 是一个数组,则首先将其转换为映射(使得对于每个索引i ,map[i] 均为array[i] ,且array[i] 有效);否则,如果它不是映射,则将其覆盖为一个空映射。
另请参阅 operator[](qint64)、QCborMap::operator[] 、QCborMap::value() 以及QCborMap::find()。
const QCborValue QCborValue::operator[](const QString &key) const
如果此QCborValue 是QCborMap ,则会在元素中搜索键值与key 匹配的项。如果映射中不存在与key 匹配的键,或者此QCborValue 对象不是映射,则返回 undefined 值。
该函数等同于:
value.toMap().value(key);另请参阅 operator[](qint64)、QCborMap::operator[] 、QCborMap::value() 以及QCborMap::find()。
QCborValueRef QCborValue::operator[](QLatin1StringView key)
返回一个 QCborValueRef,可用于通过给定的key 读取或修改此映射中的条目。当此QCborValue 为QCborMap 时,该函数等同于该映射上的 [] 运算符。
在返回引用之前:如果该QCborValue 是一个数组,则首先将其转换为映射(使得对于每个索引i ,map[i] 均为array[i] ,且array[i] 有效);否则,如果它不是映射,则将其覆盖为一个空映射。
这是一个重载函数。
另请参阅 operator[](qint64)、QCborMap::operator[] 、QCborMap::value() 和QCborMap::find()。
QCborValueRef QCborValue::operator[](qint64 key)
返回一个 QCborValueRef,可用于读取或修改该映射或数组中与给定key 对应的条目。当该QCborValue 为QCborMap ,或者当 0 <= key < 0x10000 时为QCborArray ,则该函数等同于对该映射或数组执行相应的 [] 运算符。
在返回引用之前:如果该QCborValue 原本是一个数组,但键超出了范围,则首先将数组转换为映射(使得对于每个索引,map[i] 均为array[i] ,即i ,且array[i] 有效);否则,如果它原本不是映射,则将其覆盖为一个空映射。
这是一个重载函数。
另请参阅 operator[] 、QCborMap::operator[] 、QCborMap::value()、QCborMap::find()、QCborArray::operator[] 以及QCborArray::at()。
const QCborValue QCborValue::operator[](QLatin1StringView key) const
如果此QCborValue 是一个QCborMap ,则会在元素中搜索键值与key 匹配的项。如果地图中没有与key 匹配的键,或者此QCborValue 对象不是地图,则返回 undefined 值。
该函数等同于:
value.toMap().value(key);这是一个重载函数。
另请参阅 operator[](qint64)、QCborMap::operator[] 、QCborMap::value() 以及QCborMap::find()。
const QCborValue QCborValue::operator[](qint64 key) const
如果此QCborValue 是QCborMap ,则在元素中搜索键值与key 匹配的值。如果此对象是QCborArray ,则返回索引为key 的元素。如果数组或映射中没有匹配的值,或者此QCborValue 对象不是数组或映射,则返回 undefined 值。
这是一个重载函数。
另请参阅 operator[] 、QCborMap::operator[] 、QCborMap::value()、QCborMap::find()、QCborArray::operator[] 以及QCborArray::at()。
相关非会员
[noexcept] bool operator!=(const QCborValue &lhs, const QCborValue &rhs)
比较lhs 和rhs ,如果内容不同则返回 true,否则返回 false。如果每个QCborValue 包含一个数组或映射,则会递归地比较其中包含的元素。
有关 Qt 中 CBOR 相等性的更多信息,请参阅QCborValue::compare()。
另请参阅 compare()、QCborMap::operator==()、operator==() 以及operator<()。
[noexcept] bool operator<(const QCborValue &lhs, const QCborValue &rhs)
比较lhs 和rhs ,如果lhs 应排在rhs 之前,则返回 true;否则返回 false。如果每个QCborValue 包含一个数组或映射,则会递归地对其中包含的元素进行比较。
有关 CBOR 排序顺序的更多信息,请参阅QCborValue::compare()。
另请参阅 compare()、QCborValue::operator==()、QCborMap::operator==()、operator==() 以及operator!=()。
[noexcept] bool operator<=(const QCborValue &lhs, const QCborValue &rhs)
比较lhs 和rhs ,如果lhs 应该排在rhs 之前,或者与rhs 相等,则返回 true;否则返回 false。如果每个QCborValue 包含一个数组或映射,则会递归地对其中包含的元素进行比较。
有关 CBOR 排序顺序的更多信息,请参阅QCborValue::compare()。
另请参阅 compare()、QCborValue::operator<()、QCborMap::operator==()、operator==() 以及operator!=()。
[noexcept] bool operator==(const QCborValue &lhs, const QCborValue &rhs)
比较lhs 和rhs ,如果它们的内容相同则返回 true,否则返回 false。如果每个QCborValue 包含一个数组或映射,则会递归地比较其中包含的元素。
有关 Qt 中 CBOR 相等性的更多信息,请参阅compare()。
另请参阅 compare()、QCborMap::operator==()、operator!=() 以及operator<()。
[noexcept] bool operator>(const QCborValue &lhs, const QCborValue &rhs)
比较lhs 和rhs ,如果lhs 应排在rhs 之后,则返回 true;否则返回 false。如果每个QCborValue 包含一个数组或映射,则会递归地比较其中包含的元素。
有关 CBOR 排序顺序的更多信息,请参阅QCborValue::compare()。
另请参阅 compare()、QCborValue::operator>=()、QCborMap::operator==()、operator==() 和operator!=()。
[noexcept] bool operator>=(const QCborValue &lhs, const QCborValue &rhs)
比较lhs 和rhs ,如果lhs 应排在rhs 之后,或者与rhs 相等,则返回 true;否则返回 false。如果每个QCborValue 包含一个数组或映射,则会递归地对其中的元素进行比较。
有关 CBOR 排序顺序的更多信息,请参阅QCborValue::compare()。
另请参阅 compare(),QCborValue::operator>(),QCborMap::operator==(),operator==() 以及operator!=()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.