IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Quick MQTT Example

Registering https:// to QML and using it in a Qt Quick user interface.

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

Quick MQTT Example▲

Image non disponible

Quick MQTT demonstrates how to register https:// as a QML type and use it in a Qt Quick application.

https:// does not provide a QML API in its current version. However, you can make the C++ classes of the module available to QML.

Creating a Client▲

We create a QmlMqttClient class with the https:// class as a base class:

 
Sélectionnez
QmlMqttClient::QmlMqttClient(QObject *parent)
    : QMqttClient(parent)
{
}

We use the subscribe() function to create a subscription object:

 
Sélectionnez
QmlMqttSubscription* QmlMqttClient::subscribe(const QString &topic)
{
    auto sub = QMqttClient::subscribe(topic, 0);
    auto result = new QmlMqttSubscription(sub, this);
    return result;
}

We connect to QMqttSubscription::messageReceived( ) to receive all messages sent to the broker:

 
Sélectionnez
QmlMqttSubscription::QmlMqttSubscription(QMqttSubscription *s, QmlMqttClient *c)
    : sub(s)
    , client(c)
{
    connect(sub, &QMqttSubscription::messageReceived, this, &QmlMqttSubscription::handleMessage);
    m_topic = sub->topic();
}

We use an https:// object to store the payload of a received message:

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

Registering Classes in QML▲

In the main.cpp file, we register the QmlMqttClient class as a QML type, MqttClient:

 
Sélectionnez
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;

    qmlRegisterType<QmlMqttClient>("MqttClient", 1, 0, "MqttClient");

In addition, we register the QmlMqttSubscription class as an uncreatable type:

 
Sélectionnez
    qmlRegisterUncreatableType<QmlMqttSubscription>("MqttClient", 1, 0, "MqttSubscription", QLatin1String("Subscriptions are read-only"));

We can now use the MqttClient type in the main.qml file to create an MQTT client:

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

List of Files▲

Files:

List of Files▲

  • quicksubscription/CMakeLists.txt

  • quicksubscription/main.cpp

  • quicksubscription/main.qml

  • quicksubscription/qml.qrc

  • quicksubscription/qmlmqttclient.cpp

  • quicksubscription/qmlmqttclient.h

  • quicksubscription/quicksubscription.pro

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est disponible sous la licence https:// telle que publiée par la Free Software Foundation.