本页内容

QUuid Class

QUuid 类用于存储一个全局唯一标识符(UUID)。更多内容...

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

QBluetoothUuid

注:本类中的所有函数均为可重入函数。

QUuid 比较

类别可比较类型描述
strongQUuid
strongGUID。

注意: 与 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
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(全局 唯一标识符)来代替,但二者指代的是同一概念。

实际上,GUID是UUID的一种变体。目前有多种变体在使用。每个UUID都包含一个位字段,用于指定其属于哪种类型的UUID(即哪种变体)。 调用 `variant()` 可查明 QUuid 实例包含哪种类型的 UUID。该方法会提取 16 个字节中第 8 个字节的高三位。 在 QUuid 中,第 8 字节为QUuid::data4[0] 。如果您使用接受所有数值作为参数的构造函数来创建 QUuid 实例,请参考下表设置参数b1 的最高三位,该参数将转换为QUuid::data4[0] ,其最高三位即包含变体字段。在该表中,“x”表示不限。

msb0msb1msb2Variant
0xxNCS(网络计算系统)
10xDCE(分布式计算环境)
110微软 (GUID)
111预留供未来扩展使用

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

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

上表中所列 DCE 版本的字段布局在《网络工作组 UUID 规范》中进行了规定。

大多数平台都提供了生成新 UUID 的工具,例如uuidgen 和guidgen 。您也可以使用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仅包含五个以连字符分隔的字段,不包含大括号。示例:00000000-0000-0000-0000-000000000000。
QUuid::Id1283仅包含十六进制数字,不包含大括号或连字符。请注意,QUuid 无法将此格式解析回输入。

enum QUuid::Variant

此枚举定义了UUID中variant field 部分所使用的值。variant字段中的值决定了该128位值的布局。

常量值描述
QUuid::VarUnknown-1变体未知
QUuid::NCS0保留用于 NCS(网络计算系统)的向后兼容性
QUuid::DCE2分布式计算环境,由QUuid
QUuid::Microsoft6保留用于 Microsoft 向后兼容性(GUID)
QUuid::Reserved7保留用于未来定义

enum QUuid::Version

此枚举定义了UUID中“version field ”部分所使用的值。只有当“variant field ”字段的值为QUuid::DCE 时,“version”字段才有意义。

常量值描述
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,格式为“{00000000-0000-0000-0000-000000000000}”。

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

根据字符串text 创建一个 QUuid 对象,该字符串必须以五个由 '-' 分隔的十六进制字段格式表示,例如 "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",其中每个 'x' 代表一个十六进制数字。 此处显示的花括号是可选的,但通常会包含它们。如果转换失败,则会创建一个空 UUID。有关这五个十六进制字段如何映射到 QUuid 中的公共数据成员的说明,请参阅toString()。

注意:在 Qt 6.3 之前的版本中,此构造函数是一组重载,包括QString 、QByteArray 和const char* ,而不是一个接受QAnyStringView 的构造函数。

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

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

将 Windows 的“guid ”转换为 Qt 的 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 上,将使用 Windows API 生成一个 GUID,其类型由该 API 决定。

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

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

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

注意:在 Qt 6.8 之前的版本中,此函数接受的是QByteArray ,而非QByteArrayView 。

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

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

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

另请参阅 variant()、version()、createUuidV5() 以及createUuidV7()。

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

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

注意:在 Qt 6.8 之前的版本中,此函数接受的是QByteArray ,而非QByteArrayView 。

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

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

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

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

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

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

它使用一个按时间排序的值字段,该字段源自自 UNIX 纪元以来的毫秒数,具体如RFC9562 所述。

该函数在 Qt 6.9 中引入。

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

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

从bytes 中读取128位(16字节)数据,采用字节顺序order ,并返回与这些字节对应的QUuid 。如果字节顺序order 为QSysInfo::BigEndian ,则该函数的功能与fromRfc4122()相同。

该函数在 Qt 6.6 中引入。

另请参阅 fromRfc4122()。

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

创建一个新的QUuid ,其中包含uuid 的CFUUID副本。

注意:此 函数仅在 Apple 平台上可用。

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

创建一个新的QUuid ,其中包含uuid 的NSUUID副本。

注意:此 函数仅在 Apple 平台上可用。

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

根据 RFC 4122 第 4.1.2 节的规定,从 UUID 的二进制表示形式创建一个 `QUuid ` 对象。有关所需 `bytes ` 的顺序的进一步说明,请参阅toRfc4122()。

接受的字节数组并非人类可读格式。

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

注意:在 Qt 6.3 之前的版本中,此函数接受的是QByteArray ,而不是QByteArrayView 。

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

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

根据字符串string 创建一个QUuid 对象,该字符串必须以五个用 '-' 分隔的十六进制字段格式表示,例如 "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",其中每个 'x' 代表一个十六进制数字。 此处显示的大括号是可选的,但通常会包含它们。如果转换失败,则返回一个空 UUID。有关这五个十六进制字段如何映射到QUuid 中的公共数据成员的说明,请参见toString()。

注意:在 Qt 6.3 之前的版本中,此函数是一个重载集,由QStringView 和QLatin1StringView 组成,而不是一个接受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 中的四个公共数据成员,具体对应关系如下:

字段编号来源
1data1
2data2
3数据3
4data4[0] .. data4[1]
5data4[2] .. data4[7]

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

返回一个基于此QUuid 并按order 指定的字节顺序生成的128位ID。如果顺序为QSysInfo::BigEndian ,则该函数的二进制内容与toRfc4122()相同。更多详细信息请参阅该函数。

该函数在 Qt 6.6 中引入。

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

CFUUIDRef QUuid::toCFUUID() const

根据QUuid 生成一个CFUUID。

调用方拥有该 CFUUID,并负责将其释放。

注意:此 函数仅在 Apple 平台上可用。

NSUUID *QUuid::toNSUUID() const

根据QUuid 创建一个NSUUID。

该 NSUUID 将被自动释放。

注意:此 函数仅在 Apple 平台上可用。

QByteArray QUuid::toRfc4122() const

返回此QUuid 的二进制表示形式。该字节数组采用大端字节序格式,并按照RFC 4122第4.1.2节“布局与字节序”的规定进行格式化。

字节顺序如下:

字段编号源
1data1
2data2
3数据3
4data4[0] .. data4[7]

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

另请参阅 toBytes()。

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

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

字段编号来源
1data1
2data2
3数据3
4data4[0] .. data4[1]
5data4[2] .. data4[7]

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

返回一个由该QUuid 根据order 指定的字节序生成的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 field 为QUuid::DCE ,则返回该 UUID 的version field 。否则,返回QUuid::VerUnknown 。

另请参阅 variant()。

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

根据QUuid 返回一个Windows GUID。

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

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

将一个 Windowsguid 分配给一个 QtQUuid 。

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

相关的非成员

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

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

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

如果 UUIDlhs 与 Windows GUIDrhs 不相等,则返回true ;否则返回false 。

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

如果lhs QUuid 和rhs QUuid 不同,则返回true ;否则返回false 。

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

对lhs 与rhs 进行比较,如果lhs 和rhs 的相对排序顺序对于当前操作是正确的,则返回true ;否则返回false 。请注意,该函数执行的排序可能与toString() 创建的字符串的排序顺序不一致,也可能与 toId128() 生成的整数排序顺序不一致,或与toBytes() 和toRfc4122() 返回的字节数组排序顺序不一致。

另请参阅 variant()。

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)

如果 UUIDlhs 与 Windows GUIDrhs 相等,则返回true ;否则返回false 。

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

如果lhs QUuid 与rhs QUuid 完全相同,则返回true ;否则返回false 。

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

从流s 中读取一个UUID,并将其写入id 。

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