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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。