Auf dieser Seite

Qt Quick Abonnement

Verwenden Sie „ Qt Quick Controls “, um eine Anwendung zu erstellen, die MQTT-Themen abonnieren kann.

MQTT-Abonnementschnittstelle mit den Feldern „Hostname“, „Port“ und „Topic“ sowie den Schaltflächen „Verbinden“ und „Abonnieren“

Qt Quick Das Beispiel „Subscription“ zeigt, wie man „ QMqttClient “ als QML-Typ registriert und in einer „ Qt Quick “-Anwendung verwendet.

Qt MQTT bietet in der aktuellen Version keine QML-API. Sie können jedoch die C++-Klassen des Moduls für QML verfügbar machen.

Erstellen eines Clients

Stellen Sie eine Verbindung zu „ QMqttSubscription::messageReceived “ ( ) her, um alle an den Broker gesendeten Nachrichten zu empfangen:

QmlMqttSubscription::QmlMqttSubscription(QMqttSubscription *s, QmlMqttClient *c)
    : sub(s)
    , client(c)
{
    connect(sub, &QMqttSubscription::messageReceived, this, &QmlMqttSubscription::handleMessage);
}

Erstellen Sie eine ` QmlMqttClient `-Klasse mit der ` QMqttClient `-Klasse als Basisklasse:

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);
}

Verwenden Sie die Funktion ` subscribe() `, um ein Abonnementobjekt zu erstellen:

QmlMqttSubscription* QmlMqttClient::subscribe(const QString &topic)
{
    auto sub = m_client.subscribe(topic, 0);
    auto result = new QmlMqttSubscription(sub, this);
    return result;
}

Verwenden Sie ein ` QMqttMessage `-Objekt, um die Nutzdaten einer empfangenen Nachricht zu speichern:

void QmlMqttSubscription::handleMessage(const QMqttMessage &qmsg)
{
    emit messageReceived(qmsg.payload());
}

Registrieren von Klassen in QML

Laden Sie in der Datei „ main.cpp “ den QML-Typ „Main“ aus dem Modul „subscription“:

    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);

Verwenden Sie nun den Typ „MqttClient“ in der Datei „ Main.qml “, um einen MQTT-Client zu erstellen:

    MqttClient {
        id: client
        hostname: hostnameField.text
        port: portField.text
    }

Dateien:

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.