mqtt, connect, signals & slots
Verfasst: 15. Februar 2024 17:02
Hallo in die Runde,
ich bin zwar nicht neu in Sachen c/c++, aber relativ neu in Sachen QT. Und ich habe ein Problem mit Connect, Signals und Slots.
Ich nutze das MQTT-Modul, um mich mit einem Broker zu verbinden und Messages zu bestimmten Topics zu empfangen.
Die mitgelieferten Beispiel funktionieren auch so weit, also arbeitet das Modul korrekt.
Nun muss ich ja reagieren wenn ich eine Nachricht empfange. Und dazu muss ein entsprechender Funktionshandler mit dem zugehörigen Signal verknüpft werden.
Dazu habe ich in der MainWindow-Klasse folgenden Slot und folgende Variablen deklariert
Ausserdem habe ich einen Button, mit dem das subscribe ausgeführt wird
Und natürlich habe ich auch einen Funktionshandler, der also aufgerufen werden soll wenn ich eine Message vom Broker empfange
Connect klappt, und subscribe auch. Aber der Funktionshandler wird nicht aufgerufen.
Da ich mit den gleichen Angaben bei den Beispielen Erfolg habe, kann es auch nicht am Topic liegen, es muss also irgendwie am connect liegen.
Wie krieg ich hier die Kuh vom Eis ?
Greets
Grieko
ich bin zwar nicht neu in Sachen c/c++, aber relativ neu in Sachen QT. Und ich habe ein Problem mit Connect, Signals und Slots.
Ich nutze das MQTT-Modul, um mich mit einem Broker zu verbinden und Messages zu bestimmten Topics zu empfangen.
Die mitgelieferten Beispiel funktionieren auch so weit, also arbeitet das Modul korrekt.
Nun muss ich ja reagieren wenn ich eine Nachricht empfange. Und dazu muss ein entsprechender Funktionshandler mit dem zugehörigen Signal verknüpft werden.
Dazu habe ich in der MainWindow-Klasse folgenden Slot und folgende Variablen deklariert
Code: Alles auswählen
private slots:
void updateMessage(const QMqttMessage &mqttMsg);
private:
Ui::MainWindow *ui;
QMqttClient *m_client;
QMqttSubscription *sub;
Code: Alles auswählen
// Subscripe Button wurde gedrueckt
void MainWindow::on_pushButton_3_clicked()
{
QMqttTopicFilter f;
f.setFilter("HF02//#");
sub = m_client->subscribe(f);
if (!sub)
{
QMessageBox::critical(this, "Error","Could not subscribe. Is there a valid connection?");
return;
} else {
connect (sub, &QMqttSubscription::messageReceived, this, &MainWindow::updateMessage);
QMessageBox::information(this,"Message","Subscription successfull");
}
}
Code: Alles auswählen
void MainWindow::updateMessage(const QMqttMessage &mqttMsg)
{
ui->listWidget->addItem (mqttMsg.payload());
}
Da ich mit den gleichen Angaben bei den Beispielen Erfolg habe, kann es auch nicht am Topic liegen, es muss also irgendwie am connect liegen.
Wie krieg ich hier die Kuh vom Eis ?
Greets
Grieko