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