Sur cette page

Qt Quick Publication

Utilisez Qt Quick Controls pour créer une application qui peut publier sur des sujets MQTT.

Interface de publication MQTT avec les champs Hostname, Port, Topic, Message, QoS et Retain

Qt Quick Lapublication montre comment enregistrer QMqttClient en tant que type QML et l'utiliser dans une application Qt Quick.

Qt MQTT MQTT ne fournit pas d'API QML dans sa version actuelle. Cependant, vous pouvez rendre les classes C++ du module disponibles pour QML.

Création d'un client

Créez la classe enveloppante QmlMqttClient dont le membre est QMqttClient:

private:
    Q_DISABLE_COPY(QmlMqttClient)
    QMqttClient m_client;
};

Relier les méthodes du wrapper aux méthodes de QMqttClient dans le constructeur :

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

Une méthode enveloppante porte le même nom que la méthode enveloppée. Dans le cas le plus simple, il s'agit d'un simple appel de méthode :

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

Il est également possible de personnaliser une méthode enveloppante en lui ajoutant des fonctionnalités supplémentaires :

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

Enregistrement de classes en QML

Dans le fichier main.cpp, chargez le type QML Main à partir de la publication du module :

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

Utilisez maintenant le type MqttClient dans le fichier Main.qml pour créer un client MQTT :

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

Files :

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