Qt Quick Veröffentlichung

Verwenden Sie Qt Quick Controls, um eine Anwendung zu erstellen, die auf MQTT-Themen veröffentlichen kann.

Qt Quick DiePublikation zeigt, wie man QMqttClient als QML-Typ registriert und in einer Qt Quick -Anwendung verwendet.

Qt MQTT bietet in seiner 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 hat:

private:
    Q_DISABLE_COPY(QmlMqttClient)
    QMqttClient m_client;
};

Verbinden Sie die Wrapper-Methoden mit den Methoden von QMqttClient im Konstruktor:

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 den gleichen Namen wie die gewrappte Methode. Im einfachsten Fall handelt es sich nur um einen einzigen Methodenaufruf:

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

Es ist auch möglich, eine Wrapper-Methode anzupassen, indem man sie um einige 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));

Registrierung von Klassen in QML

Laden Sie 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:

© 2025 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.