Sur cette page

Qt Quick Publication

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

Interface de publication MQTT avec les champs « Nom d'hôte », « Port », « Sujet », « Message », « QoS » et « Rétention »

Qt Quick L'exemple « Publication » montre comment enregistrer ` QMqttClient ` en tant que type QML et l'utiliser dans une application « Qt Quick ».

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

Création d'un client

Créez la classe wrapper ` QmlMqttClient ` qui comporte ` QMqttClient ` comme membre :

private:
    Q_DISABLE_COPY(QmlMqttClient)
    QMqttClient m_client;
};

Reliez les méthodes de la classe de encapsulation 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 de wrapper porte le même nom que la méthode qu'elle encapsule. Dans le cas le plus simple, il s'agit simplement d'un appel de méthode unique :

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

Il est également possible de personnaliser une méthode d'encapsulation en y 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 des classes dans 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
    }

Fichiers :

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