QCborValue Class

QCborValue 类封装了一个 CBOR 值。更多

头文件: #include <QCborValue>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

该类具有很强的可比性

注意:该类中的所有函数都是可重入的

公共类型

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(double d)
QCborValue(qint64 i)
QCborValue(std::nullptr_t)
QCborValue(QCborTag tag, const QCborValue &tv = QCborValue())
QCborValue(QLatin1StringView s)
QCborValue(QCborKnownTags tag, const QCborValue &tv = QCborValue())
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
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 。QCborValue 的类型可使用type() 或 "isXxxx "函数之一进行查询。

扩展类型和标记值

标记值是一个普通的 QCborValue,它与一个作为标记的数字配对。有关 API 中标签的更多信息以及完整的官方列表,请参见QCborKnownTags 。这种组合构成了扩展类型。

QCborValue 支持 API 中的某些扩展类型,如 URL(使用QUrl )和 UUID(使用QUuid )。API 中不支持的其他扩展类型由Tag 类型的 QCborValue 表示。以后可以通过tag() 来检索标签,通过taggedValue() 来检索标签值。

为了支持未来的兼容性,包含扩展 Qt 类型的 QCborValue 与相同内容的标签类型进行比较。换句话说,以下表达式为真:

    QCborValue(uuid) == QCborValue(QCborKnownTags::Uuid, uuid.toRfc4122());

未定义和空值

QCborValue 可以包含 "空 "值,它不属于任何特定类型。它类似于 C++std::nullptr_t 类型,其唯一可能的值是nullptr 。QCborValue 有一个构造函数,该构造函数接受这种类型并创建一个空 QCborValue。

空值用于表示可选值不存在。在这方面,它类似于 C++ 标准库中的std::optional 类型。与 C++ 类型不同的是,CBOR 的空值只是 "Null "类型,无法确定它取代的具体类型。

QCborValue 也可以是未定义类型,表示 "未定义 "的值。事实上,这就是 QCborValue 默认构造函数创建的值。

未定义值不同于空值。空值用于表示未提供的可选值,而未定义值通常用于表示无法提供预期值,通常是由于错误或无法满足先决条件。

与 JSON 内容和QJsonValue 的未定义位不同,此类值是完全有效的,可以出现在 CBOR 数据流中。但与QJsonValue 的未定义位一样,CBOR 容器的 value() 或只读操作符[]也会返回无效的查找值(对于QCborArray ,索引超出范围;对于QCborMap ,键未找到)。无法将这种情况与 Undefined 的值区分开来,因此如果需要区分,请检查QCborArray 的大小,并使用QCborMap iterator API。

简单类型

CBOR 支持其他简单类型,这些类型与 Null 和 Undefined 一样,不携带其他值。它们被交替称为 "简单类型 "和 "简单值"。CBOR 将布尔编码为两种不同的类型(一种用于true ,另一种用于false ),但 QCborValue 为它们提供了方便的 API。

目前还没有其他定义的 CBOR 简单类型。QCborValue 通过isSimpleType() 和toSimpleType() 这样的应用程序接口来支持它们,以便在 Qt XML API 更新之前与未来的规范兼容。由于其他 CBOR 实现可能并不完全支持它们,因此不鼓励在此类规范出台前使用它们。

CBOR 支持

QCborValue 支持创建规范流和严格流所需的所有 CBOR 功能。它实现了RFC 7049 中指定的几乎所有功能。

下表列出了 QCborValue 支持的 CBOR 功能。

特性支持
无符号数是 (qint64 范围)
负数是 (qint64 范围)
字节字符串
文本字符串
分块字符串见下文
标签是(任意)
布尔布尔
未定义
任意简单值
半精度浮点数(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 是QCborArrayQCborMap 的辅助类。当使用这些类中的某个变异 API 时,就会得到这种类型。与 QCborValue 不同的是,新值可以分配给该类。赋值完成后,它所指向的数组或映射将根据新值进行修改。在所有其他方面,其 API 与 QCborValue 完全相同。

{解析和显示 CBOR 数据}

另请参阅 QCborArray,QCborMap,QCborStreamReader,QCborStreamWriter,QJsonValue,QJsonDocument,序列化转换器,以及保存和加载游戏

成员类型文档

枚举 QCborValue::DiagnosticNotationOption
flags QCborValue::DiagnosticNotationOptions

该枚举用于toDiagnosticNotation() 的选项参数,以修改输出格式。

常量说明
QCborValue::Compact0x00不使用任何换行符,产生紧凑的表示形式。
QCborValue::LineWrapped0x01使用换行符,每行一个QCborValue
QCborValue::ExtendedFormat0x02使用一些 RFC 7049 中没有的不同选项来表示值。这些选项可能会更改。

目前,ExtendedFormat 将改变字节数组的表示方式。如果没有该选项,字节数组始终是十六进制编码且不含空格。有了它,QCborValue::toCbor() 将根据上下文使用带空格的十六进制、base64 或 base64url 编码。

DiagnosticNotationOptions 类型是QFlags<DiagnosticNotationOption> 的类型定义。它存储 DiagnosticNotationOption 值的 OR 组合。

另请参阅 toDiagnosticNotation() 。

枚举 QCborValue::EncodingOption
flags QCborValue::EncodingOptions

该枚举用于toCbor() 的选项参数,可修改编码器的行为。

常量说明
QCborValue::NoTransformation0(默认)不执行转换。
QCborValue::UseFloat0x02告诉编码器尽可能使用 IEEE 754 单精度浮点(即float )。
QCborValue::UseFloat16UseFloat | 0x04告诉编码器尽可能使用 IEEE 754 半精度浮点(即qfloat16 )。意味着UseFloat
QCborValue::UseIntegers0x08Double 类型的值包含整数时,告诉编码器使用整数。

使用UseFloat16 是以 Canonical Format(规范格式)对数据流进行编码的必要条件,但在其他方面并无必要。

EncodingOptions 类型是QFlags<EncodingOption> 的类型定义。它存储 EncodingOption 值的 OR 组合。

另请参阅 toCbor().

enum QCborValue::Type

该枚举表示QCborValue 类型。它由type() 函数返回。

CBOR 内置类型包括

常量描述
QCborValue::Integer0x00qint64:整数值
QCborValue::ByteArray0x40QByteArray:字节数组("字节字符串)
QCborValue::String0x60QString一个 Unicode 字符串("文本字符串)
QCborValue::Array0x80QCborArray一个 QCborValues 数组
QCborValue::Map0xa0QCborMapQCborValues的关联容器
QCborValue::SimpleType0x100QCborSimpleType简单类型/值
QCborValue::FalseSimpleType + int(QCborSimpleType::False)bool值的简单类型false
QCborValue::TrueSimpleType + int(QCborSimpleType::True)bool值的简单类型true
QCborValue::NullSimpleType + int(QCborSimpleType::Null)std::nullptr_t空值的简单类型
QCborValue::UndefinedSimpleType + int(QCborSimpleType::Undefined)(无类型)未定义值的简单类型
QCborValue::Double0x202double:双精度浮点数
QCborValue::Invalid-1不是有效值,通常表示 CBOR 解码错误

此外,QCborValue 还可以表示扩展类型:

常量说明
QCborValue::Tag0xc0未知或未识别的扩展类型,由其标记(QCborTag )和标记值(QCborValue )表示。
QCborValue::DateTime0x10000QDateTime日期和时间戳
QCborValue::Url0x10020QUrl:一个 URL 或 URI
QCborValue::RegularExpression0x10023QRegularExpression正则表达式:正则表达式的模式
QCborValue::Uuid0x10025QUuid:一个 UUID

另请参阅 type().

成员函数文档

QCborValue::QCborValue(QCborArray &&a)

QCborValue::QCborValue(const QCborArray &a)

使用数组a 创建QCborValue 。之后可使用toArray() 检索该数组。

另请参阅 toArray()、isArray() 和isMap()。

QCborValue::QCborValue(QCborMap &&m)

QCborValue::QCborValue(const QCborMap &m)

使用地图m 创建QCborValue 。随后可使用toMap() 检索该地图。

另请参阅 toMap(),isMap() 和isArray()。

QCborValue::QCborValue(QCborKnownTags tag, const QCborValue &tv = QCborValue())

QCborValue::QCborValue(QCborTag tag, const QCborValue &tv = QCborValue())

为扩展类型创建QCborValue ,扩展类型由标记值tag 和标记值tv 表示。以后可使用tag() 检索标记,使用taggedValue() 检索标记值。

另请参阅 isTag()、tag()、taggedValue() 和QCborKnownTags

QCborArray QCborValue::toArray() const

QCborArray QCborValue::toArray(const QCborArray &defaultValue) const

如果是数组类型,则返回存储在QCborValue 中的数组值。否则,返回defaultValue

请注意,此函数不执行从其他类型到QCborArray 的转换。

另请参阅 isArray()、isByteArray()、isMap()、isContainer() 和toMap()。

QCborMap QCborValue::toMap() const

QCborMap QCborValue::toMap(const QCborMap &defaultValue) const

如果是映射类型,则返回存储在此QCborValue 中的映射值。否则,返回defaultValue

请注意,此函数不执行从其他类型到QCborMap 的转换。

另请参阅 isMap()、isArray()、isContainer() 和toArray()。

[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 ,也将传递 。

QCborValue::QCborValue()

创建Undefined 类型的 QCborValue。

CBOR 未定义值用于表示信息缺失,通常是由于之前的操作没有按预期完成。QCborArrayQCborMap API 也使用它们来表示未找到搜索项。

未定义的值由Undefined simple type 表示。因此,对于isSimpleType() 和isSimpleType(QCborSimpleType::Undefined) ,具有未定义值的 QCborValues 也将返回 true。

未定义值不同于空值。

具有未定义值的 QCborValue 对象也不同于无效的 QCborValue 对象。API 不会创建无效的 QCborValue,但它们可能因解析错误而存在。

另请参阅 isUndefined()、isNull() 和isSimpleType()。

QCborValue::QCborValue(QCborSimpleType st)

创建一个简单类型的 QCborValuest 。以后可以使用toSimpleType() 和isSimpleType(st) 来检索该类型。

CBOR 简单类型是没有任何关联值的类型,如 C++ 的std::nullptr_t 类型,其唯一可能的值是nullptr

如果stQCborSimpleType::Null ,生成的 QCborValue 将是Null 类型,类似的还有QCborSimpleType::Undefined 。如果stQCborSimpleType::FalseQCborSimpleType::True ,创建的 QCborValue 将是一个布尔值,分别包含 false 或 true 值。

此函数可用于 API 中未定义的简单类型。例如,要创建一个简单类型为 12 的 QCborValue,可以写入以下内容

在简单类型规范发布之前,不应使用这些类型,因为其他实现可能无法正确支持它们。简单类型值 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"。因此,布尔 QCborValues 将返回isSimpleType() 的 true 值,以及isSimpleType(QCborSimpleType::False)isSimpleType(QCborSimpleType::True) 中的一个。

另请参阅 toBool(),isBool(),isTrue(),isFalse() 和isSimpleType() 。

QCborValue::QCborValue(const QByteArray &ba)

创建具有字节数组值ba 的 QCborValue。随后可使用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)

创建一个 UUID 扩展类型的 QCborValue 对象,其中包含uuid 所代表的值。以后可以使用toUuid() 检索该值。

CBOR UUID 类型是一种扩展类型,由标记为Uuid 的字节数组表示。

另请参见 toUuid()、isUuid() 和taggedValue()。

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(QLatin1StringView s)

这是一个重载函数。

使用s 查看的 Latin-1 字符串创建 QCborValue。稍后可使用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");

请注意,像QUrlQDateTime 这样的 Qt XML 类型会对其参数进行规范化和其他修改。上面的表达式之所以为真,是因为右侧的字符串是左侧QCborValue 的规范化值。例如,如果两边的 "https "部分都是大写,比较就会失败。有关QCborValue 执行的规范化的信息,请查阅相关 Qt 类型的构造函数文档。

排序顺序

RFC 7049 第 3.9 节定义了 CBOR 中的排序顺序,其中讨论了按照 Canonical 编码对映射中的键进行排序的问题。根据该规范,"排序是根据键数据项的字节表示法进行的",并列举了以下结果:

  • "如果两个键的长度不同,较短的键排序较早;"
  • "如果两个键的长度相同,按(字节)词法顺序排列值较低的键排序较早。

这导致 QCborValues 的排序出人意料,该函数的结果与随后通过比较所含元素而检索到的结果不同。例如,包含字符串 "zzz "的QCborValue 会排序在包含字符串 "foobar "的QCborValue 之前,尽管以QStringsQByteArrays 进行比较时,"zzz "会排序在 "foobar "之后(字典顺序)。

QCborValue 假设类型也应排序,但规范并没有明确指出不同类型的数值应采用什么排序顺序(规范说排序不应 "注意主要类型的 3/5 位分割")。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::fromJsonValue(const QJsonValue &v)

v 中包含的 JSON 值转换为相应的 CBOR 值并返回。从 JSON 转换为 CBOR 不会丢失数据,因为 CBOR 类型集比 JSON 更丰富。此外,使用该函数转换为 CBOR 的值可以使用toJsonValue() 转换回 JSON,且不会丢失数据。

下表列出了 JSON 类型到 CBOR 类型的映射:

JSON 类型CBOR 类型
布尔布尔
数字整数(如果数字没有分数且在qint64 范围内)或双数
字符串字符串
数组数组
对象地图

QJsonValue 也可以是未定义的,表示之前的操作未能完成(例如,搜索对象中不存在的键)。未定义值不是 JSON 类型,可能不会出现在 JSON 数组和对象中,但如果相应的 未定义,则该函数会返回 未定义值。QJsonValue QCborValue

另请参见 toJsonValue()、fromVariant()、QCborArray::fromJsonArray() 和QCborMap::fromJsonObject()。

[static] QCborValue QCborValue::fromVariant(const QVariant &variant)

QVariant variant 转换为QCborValue 并返回。

QVariants 可能包含大量不同的元类型,其中许多在 CBOR 中没有对应的表示。这包括所有用户定义的元类型。在准备使用 CBOR 传输时,建议对每个值进行仔细编码,以防止丢失表示。

下表列出了该函数将应用的转换:

Qt (C++) 类型CBOR 类型
无效 (QVariant())未定义
bool布尔
std::nullptr_t
short,ushort,int,uintqint64整数
quint64整数,如果超出 qint64 的范围,则为 Double
float,double
QByteArrayByteArray
QDateTimeDateTime
QCborSimpleType简单类型
QJsonArray数组,使用 QCborArray::formJsonArray() 转换
QJsonDocument数组或地图
QJsonObject使用QCborMap::fromJsonObject() 进行转换
QJsonValue使用fromJsonValue() 转换
QRegularExpressionRegularExpression
QString字符串
QStringList数组
QVariantHash地图
QVariantList数组
QVariantMap地图
QUrlUrl
QUuidUuid

如果QVariant::isNull() 返回 true,则返回一个空QCborValue 或插入到列表或对象中,与QVariant 所携带的类型无关。请注意 Qt XML 6.0 中影响QVariant::isNull() 的行为变化也会影响此函数。

对于上面未列出的其他类型,将尝试转换为字符串,通常但不总是调用QVariant::toString() 。如果转换失败,该值将被未定义的 CBOR 值取代。请注意,对于大多数类型,QVariant::toString() 也是有损的。

请注意,通过QVariant::toString() 进行的转换可能会随时更改。QVariantQCborValue 今后可能会扩展以支持更多类型,这将导致该函数执行转换的方式发生变化。

另请参阅 toVariant()、fromJsonValue()、QCborArray::toVariantList()、QCborMap::toVariantMap() 和QJsonValue::fromVariant()。

bool QCborValue::isArray() const

如果QCborValue 属于数组类型,则返回 true。可使用toArray() 获取数组值。

另请参阅 type() 和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。

另请参阅 isArray() 和isMap()。

bool QCborValue::isDateTime() const

如果QCborValue 属于日期/时间类型,则返回 true。可以使用toDateTime() 检索该值。日期/时间是使用标签DateTime 的扩展类型。

此外,从 CBOR 数据流解码时,QCborValue 将解释值为UnixTime_t 的标记,并将其转换为等效的日期/时间。

另请参阅 type() 和toDateTime()。

bool QCborValue::isDouble() const

如果QCborValue 是浮点类型,则返回 true。可以使用toDouble() 获取该值。

另请参阅 type() 和toDouble()。

bool QCborValue::isFalse() const

如果QCborValue 是布尔型,且值为 false,则返回 true。之所以存在这个函数,是因为 CBOR 布尔型在内部被存储为两个独立的类型,一个表示真值,一个表示假值。

另请参阅 type()、isBool()、isTrue() 和toBool()。

bool QCborValue::isInteger() const

如果QCborValue 是整数类型,则返回 true。可使用toInteger() 获取整数值。

另请参阅 type() 和toInteger()。

bool QCborValue::isInvalid() const

如果QCborValue 不属于任何有效类型,则返回 true。无效的 QCborValues 与未定义值的 QCborValues 不同,它们通常代表解码错误。

另请参阅 isUndefined() 和isNull()。

bool QCborValue::isMap() const

如果QCborValue 属于映射类型,则返回 true。可使用toMap() 检索映射值。

另请参阅 type() 和toMap()。

bool QCborValue::isNull() const

如果QCborValue 为空类型,则返回 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) 重载检查它们。

另请参见 QCborSimpleTypeisSimpleType(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() 获取字符串值。

另请参阅 type() 和toString()。

bool QCborValue::isTag() const

如果QCborValue 属于标记类型,则返回 true。标签值可使用tag() 检索,标记值可使用taggedValue() 检索。

对于 API 可识别的扩展类型,该函数也返回 true。对于在 Qt XML API 更新以支持扩展类型之前直接处理扩展类型的代码,可以使用taggedValue() 重新创建标记 + 标记值对。

另请参见 type()、tag()、taggedValue() 和taggedValue()。

bool QCborValue::isTrue() const

如果QCborValue 是一个具有 true 值的布尔值,则返回 true。之所以存在这个函数,是因为 CBOR 布尔型在内部被存储为两个独立的类型,一个表示 false,一个表示 true。

另请参阅 type()、isBool()、isFalse() 和toBool()。

bool QCborValue::isUndefined() const

如果QCborValue 属于未定义类型,则返回 true。

CBOR 未定义值用于表示信息缺失,通常是由于之前的操作未按预期完成。QCborArrayQCborMap API 也使用它们来表示未找到搜索项。

未定义值不同于空值。

QCborValue 未定义值的对象也不同于无效的 对象。API 不会创建无效的 QCborValues,但它们可能因解析错误而存在。QCborValue

另请参阅 type()、isNull() 和isInvalid()。

bool QCborValue::isUrl() const

如果QCborValue 属于 URL 类型,则返回 true。可以使用toUrl() 获取 URL 值。

另请参阅 type() 和toUrl()。

bool QCborValue::isUuid() const

如果QCborValue 包含 UUID,则返回 true。可以使用toUuid() 获取该值。

另请参阅 type() 和toUuid()。

[noexcept] void QCborValue::swap(QCborValue &other)

将此值与other 互换。该操作速度非常快,从未出现过故障。

QCborTag QCborValue::tag(QCborTag defaultValue = QCborTag(-1)) const

如果该扩展QCborValue 对象属于标记类型,则返回该对象的标记,否则返回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()。

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

使用opt 中指定的选项,将QCborValue 对象编码为 CBOR 表示形式,并返回包含该表示形式的字节数组。

该函数不会失败,除非该QCborValue 或其中包含的任何项(如果是映射或数组)无效。无效类型通常不会由 API 生成,但可能是解码错误造成的。

默认情况下,该函数不对QCborValue 中的值执行转换,直接将所有浮点写成双精度 (double) 类型。如果指定了UseFloat 选项,它将使用单精度 (float) 来表示任何浮点数值,因为使用这种表示方法不会损失精度。这包括无穷大和 NaN 值。

同样,如果指定了UseFloat16 ,如果转换为半精度 (qfloat16) 浮点数不会造成精度损失,该函数将尝试使用半精度浮点数。对于无穷小和 NaN 值,这始终是正确的。

如果指定UseIntegers ,该函数将对任何包含实际整数的浮点数值使用整数。

另请参见 fromCbor()、fromVariant() 和fromJsonValue()。

void QCborValue::toCbor(QCborStreamWriter &writer, QCborValue::EncodingOptions opt = NoTransformation) const

这是一个重载函数。

使用opt 中指定的选项,将QCborValue 对象编码为其 CBOR 表示形式,并发送给writer 指定的写入器。例如,多个 QCborValues 可以使用同一个写入器,以便对较大数组中的不同元素进行编码。

该函数不会失败,除非该QCborValue 或所包含的任何项目(如果是映射或数组)无效。无效类型通常不会由 API 生成,但可能是解码错误造成的。

默认情况下,该函数不会对QCborValue 中的值进行转换,而是直接将所有浮点写入双精度(二进制 64)类型。如果指定了UseFloat 选项,该函数将使用单精度(二进制 32)表示任何浮点数值,使用该表示法不会损失精度。这包括无穷大和 NaN 值。

同样,如果指定了UseFloat16 ,如果转换为半精度(二进制 16)浮点数不会造成精度损失,那么该函数将尝试使用半精度(二进制 16)浮点数。对于无穷小和 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

如果是 Double 类型,则返回存储在QCborValue 中的浮点数值。如果是整数类型,则返回转换为 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 类型注释
布尔不可能丢失数据
数值无穷大和 NaN 将转换为 Null;其他值不会丢失数据
整数数值如果整数大于253或小于-253,转换时可能丢失数据。
空值不会丢失数据
未定义类型信息丢失
字符串字符串不可能丢失数据
字节数组字符串转换为 Base64url 等无损编码,但字符串和字节数组之间的区别丢失
其他简单类型字符串类型信息丢失
数组数组转换适用于每个包含的值
地图对象键转换为字符串;值根据此表转换
标记和扩展类型特殊类型标签编号本身丢失,标签值转换为 JSON 格式

有关将 CBOR 映射键转换为字符串的信息,请参见QCborMap::toJsonObject()。

如果QCborValue 包含未定义的值,该函数也将返回未定义的QJsonValue 。请注意,JSON 不支持未定义的值,而未定义的 QJsonValues 是对规范的扩展。它们不能保存在QJsonArrayQJsonObject 中,但可以从函数中返回以表示失败。就所有其他意图和目的而言,它们与 null 相同。

标记和扩展类型的特殊处理

某些标记会进行特殊处理,并将标记值从 CBOR 转换为 JSON。下表列出了这些特殊情况:

标记CBOR 类型转换
ExpectedBase64url字节数组将字节数组编码为 Base64url
ExpectedBase64字节数组将字节数组编码为 Base64
ExpectedBase16字节数组将字节数组编码为十六进制
网址URL 和字符串使用QUrl::toEncoded() 将编码规范化为 URL 的完全编码格式
UuidUuid 和字节数组使用QUuid::toString() 创建字符串表示法

另请参阅 fromJsonValue()、toVariant()、QCborArray::toJsonArray() 和QCborMap::toJsonObject()。

QRegularExpression QCborValue::toRegularExpression(const QRegularExpression &defaultValue = {}) const

如果是正则表达式模式扩展类型,则返回存储在QCborValue 中的正则表达式值。否则,返回defaultValue

请注意,此函数不执行从其他类型到QRegularExpression 的转换。

另请参阅 isRegularExpression()、isTag() 和taggedValue()。

QCborSimpleType QCborValue::toSimpleType(QCborSimpleType defaultValue = QCborSimpleType::Undefined) const

如果QCborValue 是简单类型,则返回它的简单类型。如果不是简单类型,则返回defaultValue

以下类型属于简单类型,该函数将返回列出的值:

另请参见 type()、isSimpleType()、isBool()、isTrue()、isFalse()、isTrue()、isNull() 和isUndefined()。

QString QCborValue::toString(const QString &defaultValue = {}) const

如果是字符串类型,则返回存储在QCborValue 中的字符串值。否则,返回defaultValue

请注意,此函数不执行从其他类型到QString 的转换。

另请参阅 isString()、isByteArray() 和toByteArray()。

QUrl QCborValue::toUrl(const QUrl &defaultValue = {}) const

如果是 URL 扩展类型,则返回存储在QCborValue 中的 URL 值。否则,返回defaultValue

请注意,此函数不执行从其他类型到QUrl 的转换。

另请参阅 isUrl()、isTag() 和taggedValue()。

QUuid QCborValue::toUuid(const QUuid &defaultValue = {}) const

如果是 UUID 扩展类型,则返回存储在QCborValue 中的 UUID 值。否则,返回defaultValue

请注意,该函数不执行从其他类型到QUuid 的转换。

另请参阅 isUuid()、isTag() 和taggedValue()。

QVariant QCborValue::toVariant() const

将此值转换为本地 Qt 类型并返回相应的QVariant

下表列出了QCborValue typesQt meta types 之间的映射。

CBOR 类型Qt 或 C++ 类型注释
整数qint64
double
布尔bool
std::nullptr_t
未定义无类型(QVariant()
字节数组QByteArray
字符串QString
数组QVariantList递归转换所有值
地图QVariantMap键类型被 "字符串化"
其他简单类型QCborSimpleType
DateTimeQDateTime
UrlQUrl
RegularExpressionQRegularExpression
UuidQUuid
其他标记特殊类型标签将被忽略,标签值将使用此函数进行转换

请注意,CBOR 地图和数组中的值也会使用此函数进行递归转换,并将其放入QVariantMapQVariantList 。您不会在 QVariants 中找到QCborMapQCborArray

与 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)

other 的副本替换该 QCborObject 的内容。

[noexcept] QCborValue &QCborValue::operator=(QCborValue &&other)

这是一个重载函数。

other QCborValue 对象的内容移入此对象,并释放此对象的资源。返回此对象的引用。

QCborValueRef QCborValue::operator[](const QString &key)

返回一个 QCborValueRef,可用于读取或修改 this 中的条目,作为一个映射,并带有给定的key 。当QCborValue 是一个QCborMap 时,该函数等同于该映射上的匹配运算符[]。

map[i] 在返回引用之前:如果QCborValue 是一个数组,则首先将其转换为映射(这样,对于每个索引,array[i]i ,有效的array[i] );否则,如果它不是一个映射,则将用一个空映射覆盖。

另请参阅 operator[](qint64)、QCborMap::operator[],QCborMap::value() 和QCborMap::find() 。

const QCborValue QCborValue::operator[](const QString &key) const

如果此QCborValueQCborMap ,则搜索元素,查找键与key 匹配的值。如果在 map 中没有与key 匹配的 key,或者此QCborValue 对象不是 map,则返回未定义的值。

此函数等同于

    value.toMap().value(key);

另请参见 operator[](qint64)、QCborMap::operator[],QCborMap::value() 和QCborMap::find()。

QCborValueRef QCborValue::operator[](QLatin1StringView key)

这是一个重载函数。

返回一个 QCborValueRef,可用于读取或修改 this 中的条目,作为一个映射,并使用给定的key 。当QCborValue 是一个QCborMap 时,该函数等同于该映射上的匹配操作符[]。

map[i] 在返回引用之前:如果QCborValue 是一个数组,则首先将其转换为映射(这样,对于每个索引,array[i]i ,有效的array[i] );否则,如果它不是一个映射,则将用一个空映射覆盖。

另请参阅 operator[](qint64)、QCborMap::operator[],QCborMap::value() 和QCborMap::find() 。

QCborValueRef QCborValue::operator[](qint64 key)

这是一个重载函数。

返回一个 QCborValueRef,可用于读取或修改 this 中的条目(作为一个映射或数组),并使用给定的key 。当QCborValue 是一个QCborMap ,或者当 0 <= key < 0x10000 时,是一个QCborArray 时,该函数等同于该映射或数组上的匹配运算符[]。

在返回引用之前:如果QCborValue 是一个数组,但 key 不在范围内,则首先将数组转换为映射(这样,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 匹配的元素。如果 map 中没有与key 匹配的 key,或者此QCborValue 对象不是 map,则返回未定义的值。

此函数等同于

    value.toMap().value(key);

另请参见 operator[](qint64)、QCborMap::operator[],QCborMap::value() 和QCborMap::find()。

const QCborValue QCborValue::operator[](qint64 key) const

这是一个重载函数。

如果QCborValueQCborMap ,则搜索键值与key 匹配的元素。如果 this 是QCborArray ,则返回索引为key 的元素。如果数组或映射中没有匹配值,或QCborValue 对象不是数组或映射,则返回未定义的值。

另请参阅 operator[],QCborMap::operator[],QCborMap::value(),QCborMap::find(),QCborArray::operator[]QCborArray::at() 。

相关非成员

[noexcept] bool operator!=(const QCborValue &lhs, const QCborValue &rhs)

比较lhsrhs ,如果内容不同则返回 true,否则返回 false。如果每个QCborValue 包含数组或映射,则比较会递归到其中包含的元素。

有关 Qt XML 中 CBOR 平等性的更多信息,请参阅QCborValue::compare()。

另请参阅 compare()、QCborValue::operator==()、QCborMap::operator==()、operator==() 和operator<()。

[noexcept] bool operator<(const QCborValue &lhs, const QCborValue &rhs)

比较lhsrhs ,如果lhs 应排序在rhs 之前,则返回 true,否则返回 false。如果每个QCborValue 都包含数组或映射,则比较会递归到其中包含的元素。

有关 CBOR 排序顺序的更多信息,请参阅QCborValue::compare() 。

另请参阅 compare()、QCborValue::operator==()、QCborMap::operator==()、operator==() 和operator!=()。

[noexcept] bool operator<=(const QCborValue &lhs, const QCborValue &rhs)

比较lhsrhs ,如果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)

比较lhsrhs ,如果内容相同则返回 true,否则返回 false。如果每个QCborValue 都包含数组或映射,则比较会递归到其中包含的元素。

有关 Qt 中 CBOR 平等性的更多信息,请参阅compare() 。

另请参阅 compare(), QCborValue::operator==(),QCborMap::operator==(),operator!=() 和operator<().

[noexcept] bool operator>(const QCborValue &lhs, const QCborValue &rhs)

比较lhsrhs ,如果lhs 应排序在rhs 之后,则返回 true,否则返回 false。如果每个QCborValue 都包含数组或映射,则比较会递归到其中包含的元素。

有关 CBOR 排序顺序的更多信息,请参阅QCborValue::compare() 。

另请参阅 compare()、QCborValue::operator>=()、QCborMap::operator==()、operator==() 和operator!=()。

[noexcept] bool operator>=(const QCborValue &lhs, const QCborValue &rhs)

比较lhsrhs ,如果lhs 应排序在rhs 之后或等于rhs ,则返回 true,否则返回 false。如果每个QCborValue 都包含数组或映射,则比较会递归到其中包含的元素。

有关 CBOR 排序顺序的更多信息,请参阅QCborValue::compare() 。

另请参阅 compare()、QCborValue::operator>()、QCborMap::operator==()、operator==() 和operator!=()。

© 2025 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.