QUuid Class

QUuid 类存储通用唯一标识符(UUID)。更多

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

QBluetoothUuid

该类具有很强的可比性

该类与 GUID 具有很强的可比性

注: 与 GUID 的比较仅限于 Windows。

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

公共类型

(since 6.6) union Id128Bytes
enum StringFormat { WithBraces, WithoutBraces, Id128 }
enum Variant { VarUnknown, NCS, DCE, Microsoft, Reserved }
enum Version { VerUnknown, Time, EmbeddedPOSIX, Name, Md5, …, UnixEpoch }

公共函数

QUuid()
QUuid(QAnyStringView text)
QUuid(const GUID &guid)
(since 6.6) QUuid(QUuid::Id128Bytes id128, QSysInfo::Endian order = QSysInfo::BigEndian)
QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8)
bool isNull() const
QByteArray toByteArray(QUuid::StringFormat mode = WithBraces) const
(since 6.6) QUuid::Id128Bytes toBytes(QSysInfo::Endian order = QSysInfo::BigEndian) const
CFUUIDRef toCFUUID() const
NSUUID *toNSUUID() const
QByteArray toRfc4122() const
QString toString(QUuid::StringFormat mode = WithBraces) const
(since 6.6) quint128 toUInt128(QSysInfo::Endian order = QSysInfo::BigEndian) const
QUuid::Variant variant() const
QUuid::Version version() const
GUID operator GUID() const
QUuid &operator=(const GUID &guid)

静态公共成员

QUuid createUuid()
QUuid createUuidV3(QUuid ns, QByteArrayView baseData)
QUuid createUuidV3(const QUuid &ns, const QString &baseData)
QUuid createUuidV5(QUuid ns, QByteArrayView baseData)
QUuid createUuidV5(const QUuid &ns, const QString &baseData)
(since 6.9) QUuid createUuidV7()
(since 6.6) QUuid fromBytes(const void *bytes, QSysInfo::Endian order = QSysInfo::BigEndian)
QUuid fromCFUUID(CFUUIDRef uuid)
QUuid fromNSUUID(const NSUUID *uuid)
QUuid fromRfc4122(QByteArrayView bytes)
QUuid fromString(QAnyStringView string)
(since 6.6) QUuid fromUInt128(quint128 uuid, QSysInfo::Endian order = QSysInfo::BigEndian)
size_t qHash(const QUuid &key, size_t seed = 0)
bool operator!=(const QUuid &lhs, const GUID &rhs)
bool operator!=(const QUuid &lhs, const QUuid &rhs)
bool operator<(const QUuid &lhs, const QUuid &rhs)
QDataStream &operator<<(QDataStream &s, const QUuid &id)
QDebug operator<<(QDebug dbg, const QUuid &id)
bool operator<=(const QUuid &lhs, const QUuid &rhs)
bool operator==(const QUuid &lhs, const GUID &rhs)
bool operator==(const QUuid &lhs, const QUuid &rhs)
bool operator>(const QUuid &lhs, const QUuid &rhs)
bool operator>=(const QUuid &lhs, const QUuid &rhs)
QDataStream &operator>>(QDataStream &s, QUuid &id)

详细说明

使用通用 唯一 标识符(UUID)是在分布式计算环境中唯一标识实体的标准方法。UUID 是由某种算法生成的 16 字节(128 位)数字,其目的是保证 UUID 在使用它的分布式计算环境中是唯一的。通常使用缩写 GUID(全球 唯一 标识符)来代替 UUID,但其含义是相同的。

实际上,GUID 是 UUID 的一种变体。目前有多种变体在使用。每个 UUID 都包含一个比特字段,用于指定 UUID 的类型(变体)。调用variant() 查找 QUuid 实例包含的 UUID 类型。它提取 16 个字节中第 8 字节的三个最重要比特位。在 QUuid 中,字节 8 是QUuid::data4[0] 。如果使用接受所有数值作为参数的构造函数创建 QUuid 实例,可使用下表设置参数b1 的三个最重要位,该参数将变为QUuid::data4[0] ,并在其三个最重要位中包含变体字段。表中的 "x "表示 "无所谓"。

msb0msb1msb2变量
0xxNCS(网络计算系统)
10xDCE(分布式计算环境)
110微软(GUID)
111保留用于未来扩展

如果variant() 返回QUuid::DCE ,则 UUID 在QUuid::data3 的四个最重要位中还包含一个版本字段,您可以调用version() 来确定 QUuid 所包含的版本。如果使用接受所有数值作为参数的构造函数创建 QUuid 实例,可使用下表设置参数w2 的四个最显著位,该参数将变为QUuid::data3 ,并在其四个最显著位中包含版本字段。

msb0msb1msb2msb3版本号
0001时间
0010嵌入式 POSIX
0011Md5(名称)
0100随机
0101沙1

上表所列 DCE 版本的字段布局由网络工作组 UUID 规范指定。

大多数平台都提供了生成新 UUID 的工具,如uuidgenguidgen 。您也可以使用createUuid()。createUuid() 生成的 UUID 属于随机类型。其QUuid::Version 位设置为QUuid::Random ,其QUuid::Variant 位设置为QUuid::DCE 。UUID 的其余部分由随机数组成。从理论上讲,这意味着由createUuid() 生成的 UUID 有可能不是唯一的。但这种可能性非常

UUID 可以从数值或字符串中生成,也可以使用静态createUuid() 函数生成。它们可以通过toString() 转换为字符串。UUID 有一个variant() 和一个version() 函数,空 UUID 会从isNull() 返回 true。

成员类型文档

enum QUuid::StringFormat

toString(StringFormat) 使用该枚举来控制字符串表示的格式。可能的值有

常量说明
QUuid::WithBraces0默认情况下,toString() 将返回五个十六进制字段,以破折号分隔,并用大括号包围。例如{00000000-0000-0000-0000-000000000000}.
QUuid::WithoutBraces1只返回五个用破折号分隔的字段,不带大括号。Example: 00000000-0000-0000-0000-000000000000.
QUuid::Id1283只有十六进制数字,没有大括号或破折号。请注意,QUuid 无法将其解析为输入内容。

enum QUuid::Variant

该枚举定义了variant field 中使用的 UUID 值。变量字段中的值决定 128 位值的布局。

常量说明
QUuid::VarUnknown-1变量未知
QUuid::NCS0为 NCS(网络计算系统)向后兼容性保留
QUuid::DCE2分布式计算环境使用的方案。QUuid
QUuid::Microsoft6保留给微软向后兼容性(GUID)
QUuid::Reserved7保留用于未来定义

enum QUuid::Version

该枚举定义了version field 中使用的 UUID 值。只有当variant field 中的值为QUuid::DCE 时,版本字段才有意义。

常量说明
QUuid::VerUnknown-1版本未知
QUuid::Time1基于时间,使用节点部分的时间戳、时钟序列和 MAC 网卡地址(如有)。
QUuid::EmbeddedPOSIX2DCE 安全版本,内嵌 POSIX UUID
QUuid::NameMd5基于名称,对所有部分使用名称中的值
QUuid::Md53名称的别名
QUuid::Random4随机版本,对所有部分使用随机数
QUuid::Sha15基于名称的版本,使用 SHA-1 哈希算法
QUuid::UnixEpoch7[自 6.9 起] 基于时间的 UUID,使用自 UNIX 时间起的毫秒数

成员函数文档

[constexpr noexcept] QUuid::QUuid()

创建空 UUID。toString() 将把空 UUID 输出为"{000000-0000-0000-0000-0000000000}"。

[explicit noexcept] QUuid::QUuid(QAnyStringView text)

从字符串text 中创建一个 QUuid 对象,该字符串必须格式化为以"-"分隔的五个十六进制字段,例如"{xxxxxxxxx-xxxxxxx-xxxxxxx-xxxxxxxxxxx}",其中每个 "x "都是一个十六进制数字。这里显示的大括号是可选的,但一般都会包括在内。如果转换失败,将创建一个空 UUID。有关五个十六进制字段如何映射到 QUuid 中公共数据成员的解释,请参见toString()。

注: 在 6.3 之前的 Qt XML 版本中,该构造函数是一个重载集,由QStringQByteArrayconst char* 组成,而不是一个构造函数取QAnyStringView

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

[constexpr noexcept] QUuid::QUuid(const GUID &guid)

将 Windowsguid 转换为 Qt XML QUuid。

警告: 此函数仅适用于 Windows 平台。

[explicit noexcept, since 6.6] QUuid::QUuid(QUuid::Id128Bytes id128, QSysInfo::Endian order = QSysInfo::BigEndian)

根据积分id128 参数创建 QUuid。输入的id128 参数被认为具有字节序order

此函数在 Qt 6.6 中引入。

另请参阅 fromBytes()、toBytes()、toRfc4122() 和toUInt128()。

[constexpr noexcept] QUuid::QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8)

创建一个 UUID,其值由参数l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8 指定。

示例

// {67C8770B-44F1-410A-AB9A-F9B5446F13EE}
QUuid IID_MyInterface(0x67c8770b, 0x44f1, 0x410a, 0xab, 0x9a, 0xf9, 0xb5, 0x44, 0x6f, 0x13, 0xee);

[static] QUuid QUuid::createUuid()

在 Windows 以外的任何平台上,该函数都会返回一个新的 UUID,其变体为QUuid::DCE ,版本为QUuid::Random 。在 Windows 平台上,GUID 是使用 Windows API 生成的,其类型由 API 决定。

另请参阅 variant() 和version()。

[static noexcept] QUuid QUuid::createUuidV3(QUuid ns, QByteArrayView baseData)

该函数返回一个新的 UUID,其变体为QUuid::DCE ,版本为QUuid::Md5ns 是命名空间,baseData 是 RFC 4122 描述的基本数据。

注意: 在 6.8 之前的 Qt XML 版本中,此函数使用的是QByteArray ,而不是QByteArrayView

另请参见 variant()、version()、createUuidV5() 和createUuidV7()。

[static] QUuid QUuid::createUuidV3(const QUuid &ns, const QString &baseData)

该函数返回一个新的 UUID,其变体为QUuid::DCE ,版本为QUuid::Md5ns 是命名空间,baseData 是 RFC 4122 所描述的基本数据。

另请参见 variant()、version()、createUuidV5() 和createUuidV7()。

[static noexcept] QUuid QUuid::createUuidV5(QUuid ns, QByteArrayView baseData)

该函数返回一个新的 UUID,其变体为QUuid::DCE ,版本为QUuid::Sha1ns 是命名空间,baseData 是 RFC 4122 描述的基本数据。

注意: 在 6.8 之前的 Qt XML 版本中,此函数使用的是QByteArray ,而不是QByteArrayView

另请参见 variant()、version() 和createUuidV3()。

[static] QUuid QUuid::createUuidV5(const QUuid &ns, const QString &baseData)

该函数返回一个新的 UUID,其变体为QUuid::DCE ,版本为QUuid::Sha1ns 是命名空间,baseData 是 RFC 4122 所描述的基本数据。

另请参见 variant()、version() 和createUuidV3()。

[static, since 6.9] QUuid QUuid::createUuidV7()

该函数返回一个新的 UUID,其变体为QUuid::DCE ,版本为QUuid::UnixEpoch

它使用了一个按时间排序的值域,该值域由RFC9562 所描述的自 UNIX Epoch 开始的毫秒数衍生而来。

该函数在 Qt 6.9 中引入。

另请参见 variant()、version()、createUuidV3() 和createUuidV5()。

[static, since 6.6] QUuid QUuid::fromBytes(const void *bytes, QSysInfo::Endian order = QSysInfo::BigEndian)

使用字节序orderbytes 中读取 128 位(16 个字节),并返回这些字节对应的QUuid 。如果order 的字节序是QSysInfo::BigEndian ,则该函数的功能与fromRfc4122() 相同。

此函数在 Qt 6.6 中引入。

另请参阅 fromRfc4122()。

[static] QUuid QUuid::fromCFUUID(CFUUIDRef uuid)

构造一个新的QUuid ,其中包含uuid CFUUID 的副本。

注意: 此功能仅适用于苹果平台。

[static] QUuid QUuid::fromNSUUID(const NSUUID *uuid)

构造一个新的QUuid ,其中包含uuid NSUUID 的副本。

注意: 此功能仅适用于苹果平台。

[static noexcept] QUuid QUuid::fromRfc4122(QByteArrayView bytes)

根据 RFC 4122 第 4.1.2 节的规定,用 UUID 的二进制表示创建QUuid 对象。有关bytes 所需顺序的进一步解释,请参阅toRfc4122() 。

接受的字节数组不是人类可读格式。

如果转换失败,将创建一个空 UUID。

注意: 在 6.3 之前的 Qt XML 版本中,该函数使用的是QByteArray ,而不是QByteArrayView

另请参阅 toRfc4122()、QUuid() 和fromBytes()。

[static noexcept] QUuid QUuid::fromString(QAnyStringView string)

从字符串string 创建QUuid 对象,该字符串必须格式化为以"-"分隔的五个十六进制字段,例如"{xxxxxxxxx-xxxxxxx-xxxxxxx-xxxxxxxxxxx}",其中每个 "x "都是一个十六进制数字。这里显示的大括号是可选的,但一般都会包括在内。如果转换失败,将返回空 UUID。关于五个十六进制字段如何映射到QUuid 中的公共数据成员,请参阅toString() 。

注: 在 6.3 之前的 Qt XML 版本中,该函数是一个由QStringViewQLatin1StringView 组成的重载集,而不是一个取值为QAnyStringView 的函数。

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

[static constexpr noexcept, since 6.6] QUuid QUuid::fromUInt128(quint128 uuid, QSysInfo::Endian order = QSysInfo::BigEndian)

根据积分uuid 参数创建QUuid 。输入的uuid 参数被认为具有字节序order

注: 该函数仅适用于提供 128 位整数类型的平台。

此函数在 Qt 6.6 中引入。

另请参阅 toUInt128()、fromBytes()、toBytes() 和toRfc4122() 。

[constexpr noexcept] bool QUuid::isNull() const

如果是空 UUID {00000000-0000-0000-0000-000000000000} 则返回true ;否则返回false

QByteArray QUuid::toByteArray(QUuid::StringFormat mode = WithBraces) const

返回QUuid 的字符串表示,格式由mode 参数控制。从左到右,五个十六进制字段从QUuid 中的四个公共数据成员获取,具体如下:

字段 #来源
1数据1
2数据 2
3数据 3
4数据4[0] ... 数据4[1]
5数据4[2] ... 数据4[7]

[noexcept, since 6.6] QUuid::Id128Bytes QUuid::toBytes(QSysInfo::Endian order = QSysInfo::BigEndian) const

返回根据order 指定的字节顺序从QUuid 创建的 128 位 ID。如果顺序为QSysInfo::BigEndian ,该函数的二进制内容与toRfc4122() 相同。详情请参见该函数。

此函数在 Qt 6.6 中引入。

另请参阅 toRfc4122()、fromBytes() 和QUuid()。

CFUUIDRef QUuid::toCFUUID() const

QUuid 创建 CFUUID。

调用者拥有 CFUUID 并负责释放它。

注意: 此函数仅适用于苹果平台。

NSUUID *QUuid::toNSUUID() const

QUuid 创建一个 NSUUID。

NSUUID 将自动释放。

注意: 此功能仅适用于苹果平台。

QByteArray QUuid::toRfc4122() const

返回QUuid 的二进制表示。字节数组采用 big endian 格式,格式符合 RFC 4122 第 4.1.2 节--"布局和字节顺序"。

顺序如下

字段 #字段
1数据1
2数据 2
3数据 3
4data4[0] ... data4[7]

该函数返回的字节数组中的字节包含与toBytes() 相同的二进制内容。

另请参见 toBytes()。

QString QUuid::toString(QUuid::StringFormat mode = WithBraces) const

返回QUuid 的字符串表示,格式由mode 参数控制。从左到右,五个十六进制字段从QUuid 中的四个公共数据成员获取,具体如下:

字段 #来源
1数据1
2数据 2
3数据 3
4数据4[0] ... 数据4[1]
5数据4[2] ... 数据4[7]

[constexpr noexcept, since 6.6] quint128 QUuid::toUInt128(QSysInfo::Endian order = QSysInfo::BigEndian) const

返回根据order 指定的字节顺序从QUuid 创建的 128 位整数。如果顺序是QSysInfo::BigEndian ,该函数的二进制内容与toRfc4122() 相同。详情请参见该函数。

注: 该函数仅在提供 128 位整数类型的平台上使用。

此函数在 Qt 6.6 中引入。

另请参阅 toRfc4122()、fromUInt128()、toBytes()、fromBytes() 和QUuid()。

[constexpr noexcept] QUuid::Variant QUuid::variant() const

返回 UUID 在variant field 中的值。如果返回值为QUuid::DCE ,则调用version() 查看使用的布局。空 UUID 将被视为未知变量。

另请参阅 version() 。

[constexpr noexcept] QUuid::Version QUuid::version() const

如果 UUID 的variant fieldQUuid::DCE ,则返回 UUID 的version field 。否则返回QUuid::VerUnknown

另请参阅 variant() 。

[constexpr noexcept] GUID QUuid::operator GUID() const

QUuid 返回 Windows GUID。

警告: 此函数仅适用于 Windows 平台。

[constexpr noexcept] QUuid &QUuid::operator=(const GUID &guid)

将 Windowsguid 分配给 QtQUuid

警告: 此函数仅适用于 Windows 平台。

相关非会员

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

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

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

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

lhsrhs 进行比较,如果lhsrhs 的相对排序正确,则返回true ,否则返回false 。请注意,此函数执行的排序可能不等于toString() 创建的字符串的排序,也不等于 toId128() 的整数或toBytes() 和toRfc4122() 返回的字节数组的排序。

另请参阅 variant()。

[noexcept] size_t qHash(const QUuid &key, size_t seed = 0)

返回key 的哈希值,使用seed 作为计算的种子。

[constexpr noexcept] bool operator!=(const QUuid &lhs, const GUID &rhs)

如果lhs UUID 不等于 Windows GUIDrhs ,则返回true ;否则返回false

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

如果lhs QUuidrhs QUuid 不同,则返回true ;否则返回false

QDataStream &operator<<(QDataStream &s, const QUuid &id)

将 UUIDid 写入数据流s

QDebug operator<<(QDebug dbg, const QUuid &id)

将 UUIDid 写入输出流,以获取调试信息dbg

[constexpr noexcept] bool operator==(const QUuid &lhs, const GUID &rhs)

如果lhs UUID 等于 Windows GUIDrhs ,则返回true ;否则返回false

[constexpr noexcept] bool operator==(const QUuid &lhs, const QUuid &rhs)

如果lhs QUuidrhs QUuid 相同,则返回true ;否则返回false

QDataStream &operator>>(QDataStream &s, QUuid &id)

将 UUID 从数据流s 读入id

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