Qt 快速出版
使用 Qt 快速控件创建一个可以在 MQTT 主题上发布的应用程序。
Qt 快速出版演示了如何将 QMqttClient 注册为 QML 类型并在 Qt Quick 应用程序中使用它。
Qt MQTT 在其当前版本中不提供 QML API。但是,您可以使该模块的 C++ 类对于 QML 可用。
创建客户端
创建具有 QMqttClient 成员的自定义包装类 QmlMqttClient
private: Q_DISABLE_COPY(QmlMqttClient) QMqttClient m_client; };
在构造函数中连接包装方法到 QMqttClient 的方法
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); }
包装方法具有与包装方法相同的名称。在 simplest 情况下,它仅是一个方法调用
void QmlMqttClient::connectToHost() { m_client.connectToHost(); }
也可以通过扩展一些附加功能来自定义包装方法
void QmlMqttClient::setPort(int newPort) { if (newPort < 0 || newPort > std::numeric_limits<quint16>::max()) { qWarning() << "Trying to set invalid port number"; return; } m_client.setPort(static_cast<quint16>(newPort));
在 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"publication"_s, u"Main"_s);
现在在 Main.qml
文件中使用 MqttClient 类型创建 MQTT 客户端
MqttClient { id: client hostname: hostnameField.text port: portField.text }
文件
© 2024 Qt 公司 Ltd. 有关本文档的贡献版权属于各自的拥有者。本提供文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可。Qt 及相关标志是芬兰和/或其他国家/地区的 Qt 公司的商标。所有其他商标均为各自所有者的财产。