Auf dieser Seite

Qt Quick Veröffentlichung

Verwenden Sie „ Qt Quick Controls “, um eine Anwendung zu erstellen, die Beiträge zu MQTT-Themen veröffentlichen kann.

MQTT-Veröffentlichungsschnittstelle mit den Feldern „Hostname“, „Port“, „Topic“, „Message“, „QoS“ und „Retain“

Qt Quick „Veröffentlichung“ 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

Erstellen Sie die Wrapper-Klasse „ QmlMqttClient “, die „ QMqttClient “ als Mitglied enthält:

private:
    Q_DISABLE_COPY(QmlMqttClient)
    QMqttClient m_client;
};

Verbinden Sie die Wrapper-Methoden im Konstruktor mit den Methoden von ` 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);
}

Eine Wrapper-Methode hat denselben Namen wie die umhüllte Methode. Im einfachsten Fall handelt es sich lediglich um einen einzelnen Methodenaufruf:

void QmlMqttClient::connectToHost()
{
    m_client.connectToHost();
}

Es ist auch möglich, eine Wrapper-Methode anzupassen, indem man sie um zusätzliche Funktionen erweitert:

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

Registrieren von Klassen in QML

Lade in der Datei „ main.cpp “ den QML-Typ „Main“ aus der Modulveröffentlichung:

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

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.