QMqttClient Class
QMqttClient 类代表与 MQTT 代理进行通信的中央访问点。更多内容...
| 头文件: | #include <QMqttClient> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Mqtt) target_link_libraries(mytarget PRIVATE Qt6::Mqtt) |
| qmake: | QT += mqtt |
| 继承自: | QObject |
公共类型
| enum | ClientError { NoError, InvalidProtocolVersion, IdRejected, ServerUnavailable, BadUsernameOrPassword, …, Mqtt5SpecificError } |
| enum | ClientState { Disconnected, Connecting, Connected } |
| enum | ProtocolVersion { MQTT_3_1, MQTT_3_1_1, MQTT_5_0 } |
| enum | TransportType { IODevice, AbstractSocket, SecureSocket, WebSocket, SecureWebSocket } |
属性
|
|
公共函数
| QMqttClient(QObject *parent = nullptr) | |
| virtual | ~QMqttClient() override |
| void | authenticate(const QMqttAuthenticationProperties &prop) |
| bool | autoKeepAlive() const |
| bool | cleanSession() const |
| QString | clientId() const |
| void | connectToHost() |
| void | connectToHostEncrypted(const QSslConfiguration &conf) |
(since 6.10) void | connectToHostWebSocket(QWebSocket *webSocket = nullptr) |
(since 6.10) void | connectToHostWebSocketEncrypted(QWebSocket *webSocket = nullptr) |
| QMqttConnectionProperties | connectionProperties() const |
| void | disconnectFromHost() |
| QMqttClient::ClientError | error() const |
| QString | hostname() const |
| quint16 | keepAlive() const |
| QMqttLastWillProperties | lastWillProperties() const |
| QString | password() const |
| quint16 | port() const |
| QMqttClient::ProtocolVersion | protocolVersion() const |
| qint32 | publish(const QMqttTopicName &topic, const QByteArray &message = QByteArray(), quint8 qos = 0, bool retain = false) |
| qint32 | publish(const QMqttTopicName &topic, const QMqttPublishProperties &properties, const QByteArray &message = QByteArray(), quint8 qos = 0, bool retain = false) |
| bool | requestPing() |
| QMqttServerConnectionProperties | serverConnectionProperties() const |
| void | setConnectionProperties(const QMqttConnectionProperties &prop) |
| void | setLastWillProperties(const QMqttLastWillProperties &prop) |
| void | setTransport(QIODevice *device, QMqttClient::TransportType transport) |
| QMqttClient::ClientState | state() const |
| QMqttSubscription * | subscribe(const QMqttTopicFilter &topic, quint8 qos = 0) |
| QMqttSubscription * | subscribe(const QMqttTopicFilter &topic, const QMqttSubscriptionProperties &properties, quint8 qos = 0) |
| QIODevice * | transport() const |
| void | unsubscribe(const QMqttTopicFilter &topic) |
| void | unsubscribe(const QMqttTopicFilter &topic, const QMqttUnsubscriptionProperties &properties) |
| QString | username() const |
| QByteArray | willMessage() const |
| quint8 | willQoS() const |
| bool | willRetain() const |
| QString | willTopic() const |
公共槽位
| void | setAutoKeepAlive(bool autoKeepAlive) |
| void | setCleanSession(bool cleanSession) |
| void | setClientId(const QString &clientId) |
| void | setError(QMqttClient::ClientError error) |
| void | setHostname(const QString &hostname) |
| void | setKeepAlive(quint16 keepAlive) |
| void | setPassword(const QString &password) |
| void | setPort(quint16 port) |
| void | setProtocolVersion(QMqttClient::ProtocolVersion protocolVersion) |
| void | setState(QMqttClient::ClientState state) |
| void | setUsername(const QString &username) |
| void | setWillMessage(const QByteArray &willMessage) |
| void | setWillQoS(quint8 willQoS) |
| void | setWillRetain(bool willRetain) |
| void | setWillTopic(const QString &willTopic) |
信号
| void | authenticationFinished(const QMqttAuthenticationProperties &p) |
| void | authenticationRequested(const QMqttAuthenticationProperties &p) |
| void | autoKeepAliveChanged(bool autoKeepAlive) |
| void | brokerSessionRestored() |
| void | cleanSessionChanged(bool cleanSession) |
| void | clientIdChanged(QString clientId) |
| void | connected() |
| void | disconnected() |
| void | errorChanged(QMqttClient::ClientError error) |
| void | hostnameChanged(QString hostname) |
| void | keepAliveChanged(quint16 keepAlive) |
| void | messageReceived(const QByteArray &message, const QMqttTopicName &topic = QMqttTopicName()) |
| void | messageSent(qint32 id) |
| void | messageStatusChanged(qint32 id, QMqtt::MessageStatus s, const QMqttMessageStatusProperties &properties) |
| void | passwordChanged(QString password) |
| void | pingResponseReceived() |
| void | portChanged(quint16 port) |
| void | protocolVersionChanged(QMqttClient::ProtocolVersion protocolVersion) |
| void | stateChanged(QMqttClient::ClientState state) |
| void | usernameChanged(QString username) |
| void | willMessageChanged(QByteArray willMessage) |
| void | willQoSChanged(quint8 willQoS) |
| void | willRetainChanged(bool willRetain) |
| void | willTopicChanged(QString willTopic) |
详细说明
MQTT 客户端是指使用 MQTT 与 MQTT 服务器(也称为中间件)建立网络连接的程序或设备。连接请求必须包含一个唯一的客户端标识符。此外,连接请求还可以可选地包含 Will 主题、Will 消息、用户名和密码。
建立连接后,客户端可以发送其他客户端可能有兴趣接收的消息,订阅以请求主题通知,取消订阅以撤销通知请求,以及与代理断开连接。
成员类型文档
enum QMqttClient::ClientError
此枚举类型用于指定客户端的错误状态。
| 常量 | 值 | 描述 |
|---|---|---|
QMqttClient::NoError | 0 | 未发生错误。 |
QMqttClient::InvalidProtocolVersion | 1 | 代理不接受使用指定协议版本的连接。 |
QMqttClient::IdRejected | 2 | 客户端 ID 格式不正确。这可能与其长度有关。 |
QMqttClient::ServerUnavailable | 3 | 已建立网络连接,但经纪商端的服务不可用。 |
QMqttClient::BadUsernameOrPassword | 4 | 用户名或密码中的数据格式不正确。 |
QMqttClient::NotAuthorized | 5 | 客户端无权连接。 |
QMqttClient::TransportInvalid | 256 | 底层传输层发生错误。例如,连接可能意外中断。 |
QMqttClient::ProtocolViolation | 257 | 客户端遇到协议违规,因此关闭了连接。 |
QMqttClient::UnknownError | 258 | 发生了一个未知错误。 |
QMqttClient::Mqtt5SpecificError | 259 | 该错误与 MQTT 协议第 5 层相关。原因代码可能会提供更多详细信息。 |
enum QMqttClient::ClientState
此枚举类型指定了客户端可能进入的状态。
| 常量 | 值 | 描述 |
|---|---|---|
QMqttClient::Disconnected | 0 | 客户端与经纪商断开连接。 |
QMqttClient::Connecting | 1 | 已发出连接请求,但代理尚未批准该连接。 |
QMqttClient::Connected | 2 | 客户端已与代理服务器建立连接。 |
enum QMqttClient::ProtocolVersion
此枚举指定了与消息代理通信时应使用的 MQTT 标准协议版本。
| 常量 | 值 | 描述 |
|---|---|---|
QMqttClient::MQTT_3_1 | 3 | MQTT 3.1 标准 |
QMqttClient::MQTT_3_1_1 | 4 | MQTT 3.1.1 标准,通常称为 4 版 |
QMqttClient::MQTT_5_0 | 5 | MQTT 5.0 标准 |
enum QMqttClient::TransportType
此枚举类型指定了用于与消息代理建立连接的连接方法。
| 常量 | 值 | 描述 |
|---|---|---|
QMqttClient::IODevice | 0 | 传输使用基于QIODevice 的类。 |
QMqttClient::AbstractSocket | 1 | 该传输使用基于QAbstractSocket 的类。 |
QMqttClient::SecureSocket | 2 | 该传输使用了一个基于QSslSocket 的类。 |
QMqttClient::WebSocket (since Qt 6.10) | 3 | 该传输使用基于QIODevice 的类,该类在内部使用QWebSocket 。 |
QMqttClient::SecureWebSocket (since Qt 6.10) | 4 | 该传输使用基于QIODevice 的类,该类在内部使用安全的QWebSocket 。 |
属性文档
autoKeepAlive : bool
此属性控制客户端是否自动管理发往服务器的保持活动消息。
如果此属性为true ,则客户端将在keepAlive 指定的间隔内自动向服务器发送ping消息。
否则,用户必须在连接的指定时间间隔内手动调用 `requestPing `。如果在该时间间隔内未发送任何 ping 消息,服务器将断开连接。
该属性的默认值为true 。
访问函数:
| bool | autoKeepAlive() const |
| void | setAutoKeepAlive(bool autoKeepAlive) |
通知信号:
| void | autoKeepAliveChanged(bool autoKeepAlive) |
另请参阅 keepAlive()、requestPing()、serverConnectionProperties() 以及pingResponseReceived()。
cleanSession : bool
该属性保存连接到经纪商后的状态。
访问函数:
| bool | cleanSession() const |
| void | setCleanSession(bool cleanSession) |
通知器信号:
| void | cleanSessionChanged(bool cleanSession) |
clientId : QString
该属性存储客户端的标识符值。
每个客户端都需要拥有一个唯一的 ID,才能连接到 MQTT 代理。如果用户未指定客户端 ID,则在建立连接时会自动生成一个。
访问函数:
| QString | clientId() const |
| void | setClientId(const QString &clientId) |
通知信号:
| void | clientIdChanged(QString clientId) |
error : ClientError
指定客户端当前的错误。
访问函数:
| QMqttClient::ClientError | error() const |
| void | setError(QMqttClient::ClientError error) |
通知信号:
| void | errorChanged(QMqttClient::ClientError error) |
hostname : QString
该属性存储要连接的 MQTT 代理的主机名。
如果未通过 `setTransport()` 指定传输协议,客户端将自行建立与指定主机名的套接字连接。
访问函数:
| QString | hostname() const |
| void | setHostname(const QString &hostname) |
通知器信号:
| void | hostnameChanged(QString hostname) |
keepAlive : quint16
该属性用于指定向经纪商发送定期ping消息的间隔。
一旦与消息代理建立连接,客户端就需要频繁发送更新,以表明其仍可被访问。这些更新之间的间隔由该属性指定。
该间隔以秒为单位。
如果代理在宽限期内未作出响应,连接将被关闭。
访问函数:
| quint16 | keepAlive() const |
| void | setKeepAlive(quint16 keepAlive) |
通知器信号:
| void | keepAliveChanged(quint16 keepAlive) |
另请参阅 autoKeepAlive()、requestPing() 和pingResponseReceived()。
password : QString
该属性存储用于连接经纪商的密码。
访问函数:
| QString | password() const |
| void | setPassword(const QString &password) |
通知器信号:
| void | passwordChanged(QString password) |
port : quint16
该属性用于存储连接到 MQTT 代理的端口号。
如果未通过 `setTransport()` 指定传输协议,客户端将使用该端口号与主机建立套接字连接。
访问函数:
| quint16 | port() const |
| void | setPort(quint16 port) |
通知信号:
| void | portChanged(quint16 port) |
protocolVersion : ProtocolVersion
该属性用于指定连接时使用的 MQTT 标准版本。
指定客户端用于连接消息代理的标准版本。有效值为:
- 3:MQTT 标准版本 3.1。
- 4:MQTT 标准版本 3.1.1,通常称为 MQTT 4。
- 5:MQTT 5.0 标准。
访问函数:
| QMqttClient::ProtocolVersion | protocolVersion() const |
| void | setProtocolVersion(QMqttClient::ProtocolVersion protocolVersion) |
通知器信号:
| void | protocolVersionChanged(QMqttClient::ProtocolVersion protocolVersion) |
state : ClientState
该属性保存了客户端的当前状态。
访问函数:
| QMqttClient::ClientState | state() const |
| void | setState(QMqttClient::ClientState state) |
通知器信号:
| void | stateChanged(QMqttClient::ClientState state) |
username : QString
该属性存储用于连接经纪商的用户名。
访问函数:
| QString | username() const |
| void | setUsername(const QString &username) |
通知器信号:
| void | usernameChanged(QString username) |
willMessage : QByteArray
该属性存储“遗嘱消息”的有效载荷。
访问函数:
| QByteArray | willMessage() const |
| void | setWillMessage(const QByteArray &willMessage) |
通知信号:
| void | willMessageChanged(QByteArray willMessage) |
willQoS : quint8
该属性用于指定发送和存储“意愿消息”时的服务质量(QoS)级别。
访问功能:
| quint8 | willQoS() const |
| void | setWillQoS(quint8 willQoS) |
通知信号:
| void | willQoSChanged(quint8 willQoS) |
willRetain : bool
该属性用于指定“Will Message”是否应在代理上保留,以便未来的订阅者接收。
访问函数:
| bool | willRetain() const |
| void | setWillRetain(bool willRetain) |
通知器信号:
| void | willRetainChanged(bool willRetain) |
willTopic : QString
该属性存储“遗嘱”主题。
访问函数:
| QString | willTopic() const |
| void | setWillTopic(const QString &willTopic) |
通知信号:
| void | willTopicChanged(QString willTopic) |
成员函数文档
[explicit] QMqttClient::QMqttClient(QObject *parent = nullptr)
使用指定的parent 创建一个新的MQTT客户端实例。
[override virtual noexcept] QMqttClient::~QMqttClient()
删除一个 MQTT 客户端。如果该 MQTT 客户端尚未与 MQTT 经纪人断开连接,则会自动与其断开连接。
注意:如果 通过 `setTransport ` 指定了传输协议,则该协议在此时必须有效
void QMqttClient::authenticate(const QMqttAuthenticationProperties &prop)
向经纪商发送身份验证请求。prop 指定了满足身份验证请求所需的信息。
该函数仅应在发出QMqttClient::authenticationRequested 信号后调用。
注意:扩展身份验证是 MQTT 5.0 标准的一部分,仅当客户端将 `MQTT_5_0 ` 指定为 `ProtocolVersion` 时才能使用。
另请参阅 authenticationRequested() 和authenticationFinished()。
[signal] void QMqttClient::authenticationFinished(const QMqttAuthenticationProperties &p)
该信号在扩展身份验证完成后发出。p 指定了有关身份验证过程的可用详细信息。
身份验证成功后,将发出QMqttClient::connected 信号。
注意:扩展认证是 MQTT 5.0 标准的一部分,仅当客户端将 `MQTT_5_0 ` 指定为 `ProtocolVersion` 时才能使用。
另请参阅 authenticationRequested() 和authenticate()。
[signal] void QMqttClient::authenticationRequested(const QMqttAuthenticationProperties &p)
该信号在客户端调用QMqttClient::connectToHost 或QMqttClient::connectToHostEncrypted 之后、连接建立之前发出。在扩展身份验证中,代理可能会请求额外的详细信息,需要通过调用QMqttClient::authenticate 来提供这些信息。p 指定了由代理提供的属性。
注意:扩展身份验证 是 MQTT 5.0 标准的一部分,仅当客户端将MQTT_5_0 指定为ProtocolVersion 时才可使用。
另请参阅 authenticationFinished() 和authenticate()。
[signal] void QMqttClient::brokerSessionRestored()
当客户端成功连接到代理,且cleanSession 属性设置为false ,同时代理已恢复会话后,将发出此信号。
如果客户端此前曾使用相同的clientId 进行过连接,则可以恢复会话。
[invokable] void QMqttClient::connectToHost()
建立与 MQTT 代理的连接。
注意:此 函数可通过元对象系统和 QML 调用。请参阅Q_INVOKABLE 。
void QMqttClient::connectToHostEncrypted(const QSslConfiguration &conf)
与 MQTT 代理建立加密连接。
conf 指定连接时要使用的 SSL 配置
[invokable, since 6.10] void QMqttClient::connectToHostWebSocket(QWebSocket *webSocket = nullptr)
设置 WebSocket 传输类型并向 MQTT 代理发起连接。此操作将替换先前的传输类型。如果指定了webSocket ,则忽略主机名和端口,并使用该 WebSocket 建立连接。webSocket 由调用代码持有,且必须在QMqttClient 对象的生命周期内保持有效。
注意:此 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
该函数于 Qt 6.10 中引入。
[invokable, since 6.10] void QMqttClient::connectToHostWebSocketEncrypted(QWebSocket *webSocket = nullptr)
设置安全的 WebSocket 传输类型,并向 MQTT 代理发起连接。此操作将替换之前的传输类型。如果指定了webSocket ,则忽略主机名和端口,并通过该 WebSocket 建立连接。webSocket 由调用代码拥有,且必须在QMqttClient 对象的生命周期内保持有效。
注意:此 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
该函数于 Qt 6.10 中引入。
[signal] void QMqttClient::connected()
当连接建立后,会发出此信号。
QMqttConnectionProperties QMqttClient::connectionProperties() const
向经纪商返回客户端请求的连接属性。
注意: QMqttConnectionProperties 仅在客户端将 `MQTT_5_0 ` 指定为 `ProtocolVersion` 时才可使用。
另请参阅 setConnectionProperties()。
[invokable] void QMqttClient::disconnectFromHost()
与 MQTT 代理断开连接。
注意:此 函数可通过元对象系统和 QML 调用。请参阅Q_INVOKABLE 。
[signal] void QMqttClient::disconnected()
当连接被关闭时,会发出此信号。连接可能在调用disconnectFromHost()时被关闭,也可能在经纪商断开连接时被关闭。
QMqttLastWillProperties QMqttClient::lastWillProperties() const
返回最后一个 will 的属性。
注意: QMqttLastWillProperties 仅在客户端将 `MQTT_5_0 ` 指定为 `ProtocolVersion` 时才可使用。
另请参阅 setLastWillProperties()。
[signal] void QMqttClient::messageReceived(const QByteArray &message, const QMqttTopicName &topic = QMqttTopicName())
当接收到新消息时,会发出此信号。消息的类别由topic 指定,内容为message 。
[signal] void QMqttClient::messageSent(qint32 id)
表示通过publish()函数发送的消息已被消息代理接收。id 与publish() 返回的值相同,以便跟踪消息的状态。
[signal] void QMqttClient::messageStatusChanged(qint32 id, QMqtt::MessageStatus s, const QMqttMessageStatusProperties &properties)
当由 `id ` 标识的消息的状态发生变化时,将发出此信号。`s ` 指定消息的新状态,而 `properties ` 指定服务器提供的其他属性。
[signal] void QMqttClient::pingResponseReceived()
当代理服务器响应requestPing()调用或keepAlive()探测消息后,且连接仍然有效时,会发出此信号。
[invokable] qint32 QMqttClient::publish(const QMqttTopicName &topic, const QByteArray &message = QByteArray(), quint8 qos = 0, bool retain = false)
将message 发布到消息代理,并指定topic 。qos 指定了传输该消息所需的服务质量(QoS)级别。
如果将 `retain ` 设置为 `true`,则该消息将保留在消息代理上,供其他客户端连接并接收该消息。
返回一个用于内部识别该消息的 ID。
注意:此 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
[invokable] qint32 QMqttClient::publish(const QMqttTopicName &topic, const QMqttPublishProperties &properties, const QByteArray &message = QByteArray(), quint8 qos = 0, bool retain = false)
向消息代理发布一个message ,其中包含指定的properties 和topic 。qos 指定了传输该消息所需的QoS级别。
如果将retain 设置为true ,则该消息将保留在代理上,供其他客户端连接并接收该消息。
返回一个用于内部识别该消息的 ID。
注意: 只有当客户端将MQTT_5_0 指定为ProtocolVersion 时,properties 才会被传递给代理。
注意:此 函数可通过元对象系统和 QML 调用。参见Q_INVOKABLE 。
bool QMqttClient::requestPing()
向经纪商发送一个 ping 消息,并等待回复。
如果连接处于活动状态且autoKeepAlive 的值是true ,则调用此函数将失败,因为客户端负责管理此过程。
手动使用 `requestPing() ` 需要只要连接处于活动状态,就必须在 `keepAlive ` 间隔内每次都进行一次调用。
要检查 ping 是否成功,请订阅pingResponseReceived() 信号。
如果能够发送 ping 请求,则返回true 。
另请参阅 pingResponseReceived()、autoKeepAlive() 和keepAlive()。
QMqttServerConnectionProperties QMqttClient::serverConnectionProperties() const
返回经纪商在连接尝试后返回的QMqttServerConnectionProperties 。
这可用于验证由QMqttClient::setConnectionProperties 设置的客户端连接属性是否已被代理接受。此外,在连接尝试失败的情况下,它还可用于连接诊断。
注意: 仅当客户端将 `MQTT_5_0 ` 指定为 `ProtocolVersion` 时,才可使用` QMqttServerConnectionProperties `。
另请参阅 connectionProperties()。
void QMqttClient::setConnectionProperties(const QMqttConnectionProperties &prop)
将连接属性设置为prop 。可通过QMqttConnectionProperties 向服务器请求使用特定的功能集。发送连接请求后,可通过调用QMqttClient::serverConnectionProperties 获取服务器的响应。
注意: 只有当MQTT客户端处于Disconnected 状态时,才能设置连接属性 。
注意: QMqttConnectionProperties 仅在客户端将MQTT_5_0 指定为ProtocolVersion 时才可使用。
另请参阅 connectionProperties()。
void QMqttClient::setLastWillProperties(const QMqttLastWillProperties &prop)
将“最后遗嘱”属性设置为prop 。QMqttLastWillProperties 允许为存储在消息代理中的“最后遗嘱”消息设置附加功能。
注意: 只有当 MQTT 客户端处于“Disconnected ”状态时,才能设置连接属性。
注意: 只有当客户端将MQTT_5_0 指定为ProtocolVersion 时,才可使用QMqttLastWillProperties 。
另请参阅 lastWillProperties()。
void QMqttClient::setTransport(QIODevice *device, QMqttClient::TransportType transport)
将传输设置为device 。传输可以是套接字类型,也可以是从QIODevice 派生而来,并通过transport 进行指定。
注意: 只有当 MQTT 客户端处于Disconnected 状态时,才能更换传输层 。
注意: 为客户端设置 自定义传输方式并不意味着将连接管理或所有权责任转移给该传输方式。在调用QMqttClient::connectToHost() 之前,对于基于QIODevice 的传输方式,必须先打开传输连接;对于套接字类型的传输方式,必须先建立连接。
另请参阅 transport()。
QMqttSubscription *QMqttClient::subscribe(const QMqttTopicFilter &topic, quint8 qos = 0)
添加一个新的订阅,用于接收topic 上的通知。参数qos 指定接收安全消息的服务质量级别。有关可用QoS级别的更多信息,请参阅“服务质量”。
此函数返回一个指向QMqttSubscription 的指针。如果对同一主题进行了两次订阅,则返回值指向同一个订阅实例。MQTT 客户端是该订阅的所有者。
QMqttSubscription *QMqttClient::subscribe(const QMqttTopicFilter &topic, const QMqttSubscriptionProperties &properties, quint8 qos = 0)
添加一个新订阅,用于接收topic 上的通知。参数properties 指定了需由代理验证的附加订阅属性。参数qos 指定接收安全消息的服务质量级别。有关可用服务质量级别的更多信息,请参阅“服务质量”。
此函数返回一个指向QMqttSubscription 的指针。如果对同一主题进行了两次订阅,则返回值指向同一个订阅实例。MQTT 客户端是该订阅的所有者。
注意: 只有当客户端将` MQTT_5_0 ` 指定为 `ProtocolVersion` 时,properties 才会被传递给经纪人。
QIODevice *QMqttClient::transport() const
返回用于与经纪商通信的传输方式。
另请参阅 setTransport()。
void QMqttClient::unsubscribe(const QMqttTopicFilter &topic)
取消订阅topic 。通过调用subscribe() 创建的任何订阅都不会收到通知。
注意:如果 客户端在未取消订阅的情况下与经纪服务器断开连接,经纪服务器将存储所有消息,并在下次重新连接时发布这些消息。
void QMqttClient::unsubscribe(const QMqttTopicFilter &topic, const QMqttUnsubscriptionProperties &properties)
取消订阅topic 。通过调用subscribe() 创建的任何订阅都不会收到通知。properties 指定要传递给消息代理的其他用户属性。
注意:如果 客户端在未取消订阅的情况下与代理断开连接,代理将存储所有消息,并在下次重新连接时发布这些消息。
注意: 只有当客户端将MQTT_5_0 指定为ProtocolVersion 时,properties 才会被传递给消息代理。
© 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.