Abonnements MQTT
Créer une application qui communique avec un courtier MQTT.

MQTT Subscriptions montre comment créer une application qui communique avec un courtier MQTT. Une nouvelle boîte de dialogue s'ouvre pour chaque abonnement, où vous pouvez voir les messages sur les sujets souscrits.
Création d'un client
Nous utilisons la classe QMqttClient pour créer un client MQTT et pour définir le nom d'hôte et le port du courtier à utiliser pour la connexion :
m_client = new QMqttClient(this); m_client->setHostname(ui->lineEditHost->text()); m_client->setPort(static_cast<quint16>(ui->spinBoxPort->value()));
S'abonner à des sujets
Lorsque les utilisateurs s'abonnent à des sujets dans le client, un nouvel objet d'abonnement est créé :
void MainWindow::on_buttonSubscribe_clicked() { auto subscription = m_client->subscribe(ui->lineEditTopic->text(), static_cast<quint8>(ui->spinQoS->text().toUInt())); if (!subscription) { QMessageBox::critical(this, u"Error"_s, u"Could not subscribe. Is there a valid connection?"_s); return; } auto subWindow = new SubscriptionWindow(subscription); subWindow->setWindowTitle(subscription->topic().filter()); subWindow->show(); }
Nous utilisons la classe QMqttSubscription pour stocker le sujet, l'état et le niveau de qualité de service d'un abonnement :
SubscriptionWindow::SubscriptionWindow(QMqttSubscription *sub, QWidget *parent) : QWidget(parent), ui(new Ui::SubscriptionWindow), m_sub(sub) { ui->setupUi(this); ui->labelSub->setText(m_sub->topic().filter()); ui->labelQoS->setText(QString::number(m_sub->qos())); updateStatus(m_sub->state()); connect(m_sub, &QMqttSubscription::messageReceived, this, &SubscriptionWindow::updateMessage); connect(m_sub, &QMqttSubscription::stateChanged, this, &SubscriptionWindow::updateStatus); connect(m_sub, &QMqttSubscription::qosChanged, [this](quint8 qos) { ui->labelQoS->setText(QString::number(qos)); }); connect(ui->pushButton, &QAbstractButton::clicked, m_sub, &QMqttSubscription::unsubscribe); }
Le niveau de qualité de service peut être défini séparément pour un message et pour un abonnement. Le niveau de qualité de service défini pour un abonnement détermine le niveau minimum de qualité de service. Si un message est envoyé avec un niveau de qualité de service plus élevé, le courtier augmente la qualité de service de ce message au niveau supérieur. Par exemple, si le client A s'est abonné à un sujet avec une QoS 1 et que le client B publie un message sur le sujet avec une QoS 0, le courtier augmentera automatiquement la QoS du message à 1. Si le client B publie un message sur le sujet avec une QoS 2, le courtier l'enverra avec une QoS 2.
Réception des messages
Lorsque le client reçoit un message, la classe QMqttMessage est utilisée pour stocker la charge utile du message :
void SubscriptionWindow::updateMessage(const QMqttMessage &msg) { ui->listWidget->addItem(msg.payload()); }
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.