Qt Quick 订阅
使用 Qt Quick 控件创建一个可以订阅 MQTT 主题的应用程序。
Qt Quick 订阅 展示了如何将 QMqttClient 注册为 QML 类型并在 Qt Quick 应用程序中使用它。
Qt MQTT 现阶段版本中不提供 QML API。然而,您可以使得该模块的 C++ 类对 QML 可用。
创建一个客户端
连接到 QMqttSubscription::messageReceived() 以接收发送给经纪人的所有消息
QmlMqttSubscription::QmlMqttSubscription(QMqttSubscription *s, QmlMqttClient *c) : sub(s) , client(c) { connect(sub, &QMqttSubscription::messageReceived, this, &QmlMqttSubscription::handleMessage); m_topic = sub->topic(); }
使用 QMqttClient 类作为基类创建一个 QmlMqttClient
类
QmlMqttClient::QmlMqttClient(QObject *parent) : QObject(parent) { connect(&m_client, &QMqttClient::hostnameChanged, this, &QmlMqttClient::hostnameChanged); connect(&m_client, &QMqttClient::portChanged, this, &QmlMqttClient::portChanged); connect(&m_client, &QMqttClient::stateChanged, this, &QmlMqttClient::stateChanged); }
使用 subscribe()
函数创建一个订阅对象
QmlMqttSubscription* QmlMqttClient::subscribe(const QString &topic) { auto sub = m_client.subscribe(topic, 0); auto result = new QmlMqttSubscription(sub, this); return result; }
使用一个 QMqttMessage 对象来存储接收到的消息的有效载荷
void QmlMqttSubscription::handleMessage(const QMqttMessage &qmsg) { emit messageReceived(qmsg.payload()); }
在 QML 中注册类
在 main.cpp
文件中,从订阅模块加载 QML 类型 Main
QGuiApplication app(argc, argv); QQmlApplicationEngine engine; QObject::connect( &engine, &QQmlApplicationEngine::objectCreationFailed, &app, []() { QCoreApplication::exit(EXIT_FAILURE); }, Qt::QueuedConnection); engine.loadFromModule(u"subscription"_s, u"Main"_s);
现在在 Main.qml
文件中使用 MqttClient 类型创建 MQTT 客户端
MqttClient { id: client hostname: hostnameField.text port: portField.text }
文件
© 2024 Qt 公司有限公司。此处包含的文档贡献者是各自所有者的版权所有。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证第 1.3 版 许可的。Qt 以及相关标志是芬兰的 Qt 公司及其在全世界其他国家的商标。所有其他商标均为其各自所有者的财产。