MQTT-Abonnements
Erstellen einer Anwendung, die mit einem MQTT-Broker kommuniziert.
MQTT-Abonnements zeigt, wie man eine Anwendung erstellt, die mit einem MQTT-Broker kommuniziert. Für jedes Abonnement öffnet sich ein neuer Dialog, in dem Sie die Nachrichten der abonnierten Topics sehen können.
Erstellen eines Clients
Wir verwenden die Klasse QMqttClient, um einen MQTT-Client zu erstellen und den Hostnamen und den Port des Brokers festzulegen, der für die Verbindung verwendet werden soll:
m_client = new QMqttClient(this); m_client->setHostname(ui->lineEditHost->text()); m_client->setPort(static_cast<quint16>(ui->spinBoxPort->value()));
Abonnieren von Themen
Wenn Benutzer Themen im Client abonnieren, wird ein neues Abonnementobjekt erstellt:
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(); }
Wir verwenden die Klasse QMqttSubscription, um das Topic, den Status und die QoS-Stufe eines Abonnements zu speichern:
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); }
Die QoS-Stufe kann für eine Nachricht und für ein Abonnement getrennt eingestellt werden. Die für ein Abonnement eingestellte QoS-Stufe bestimmt die minimale QoS-Stufe. Wenn eine Nachricht mit einer höheren QoS-Stufe gesendet wird, erhöht der Broker die QoS dieser Nachricht auf die höhere Stufe. Wenn beispielsweise Kunde A ein Thema mit QoS 1 abonniert hat und Kunde B eine Nachricht zu diesem Thema mit QoS 0 veröffentlicht, erhöht der Broker die QoS der Nachricht automatisch auf 1. Wenn Kunde B eine Nachricht zu diesem Thema mit QoS 2 veröffentlicht, sendet der Broker sie mit QoS 2.
Empfangen von Nachrichten
Wenn der Client eine Nachricht empfängt, wird die Klasse QMqttMessage verwendet, um die eigentliche Nutzlast der Nachricht zu speichern:
void SubscriptionWindow::updateMessage(const QMqttMessage &msg) { ui->listWidget->addItem(msg.payload()); }
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.