Qt クイックパブリケーション
Qt Quick Controls を使用して、MQTT トピックに発行できるアプリケーションを作成します。
Qt Quick Publicationでは、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); }
ラッパー・メソッドはラップされたメソッドと同じ名前を持ちます。最も単純なケースでは、単一のメソッド呼び出しだけです:
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 }
ファイル
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。