Qt クイック・サブスクリプション
Qt Quick Controls を使用して、MQTT トピックを購読できるアプリケーションを作成します。
Qt Quick Subscriptionでは、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 }
ファイル
ここに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。