mqtt, connect, signals & slots

Alles rund um die Programmierung mit Qt
Antworten
Grieko
Beiträge: 17
Registriert: 12. Oktober 2016 08:50

mqtt, connect, signals & slots

Beitrag von Grieko »

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

Code: Alles auswählen

private slots:
    void updateMessage(const QMqttMessage &mqttMsg);
private:
    Ui::MainWindow *ui;
    QMqttClient *m_client;
    QMqttSubscription *sub;
Ausserdem habe ich einen Button, mit dem das subscribe ausgeführt wird

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");
    }
}
Und natürlich habe ich auch einen Funktionshandler, der also aufgerufen werden soll wenn ich eine Message vom Broker empfange

Code: Alles auswählen

void MainWindow::updateMessage(const QMqttMessage &mqttMsg)
{
    ui->listWidget->addItem (mqttMsg.payload());
}
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
helmut.jakoby
Beiträge: 19
Registriert: 17. Januar 2012 15:26
Kontaktdaten:

Re: mqtt, connect, signals & slots

Beitrag von helmut.jakoby »

Hallo Grieko,

Aus https://doc.qt.io/qt-6/signalsandslots.html

All dies würde funktionieren:

Code: Alles auswählen

connect(sender, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed(Qbject*)));
connect(sender, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed()));
connect(sender, SIGNAL(destroyed()), this, SLOT(objectDestroyed()));
Aber das wird nicht funktionieren:

Code: Alles auswählen

connect(sender, SIGNAL(destroyed()), this, SLOT(objectDestroyed(QObject*)));
...weil der Slot ein QObject erwartet, welches vom Signal nicht gesendet wird. Diese Verbindung meldet einen Laufzeitfehler.
Grieko
Beiträge: 17
Registriert: 12. Oktober 2016 08:50

Re: mqtt, connect, signals & slots

Beitrag von Grieko »

Erstmal danke für deine Antwort, da werde ich mich morgen mal damit auseinandersetzen. Aber müsste ich denn dann nicht einen Laufzeitfehler bekommen ? Ich bekomme keinen Fehler, es tut sich einfach nichts.
Werde mich wohl morgen auch nochmal durch die Beispiele wühlen....
Antworten