QMqttSubscriber не печатает полученные сообщения

Я работаю над проектом MQTT с использованием QT. Издатель работает нормально, который открывает и закрывает блокировку, управляемую raspi3, но мне также нужно подписать тему и начать другое действие, когда подписанная тема ответит. Я также сделал первый небольшой пример, прежде чем приступить к его реализации в более крупном проекте, который прекрасно работал там.
Но не в этом проекте. Я что-то пропустил?

Вот соответствующие фрагменты из моего кода:

HMIController.cpp

QmlMqttClient *HMIController::createClient()
{

mqttClient = new QmlMqttClient;
mqttClient->handleSub();

return mqttClient;

}

qmlmqttclient.h

#ifndef QMLMQTTCLIENT_H
#define QMLMQTTCLIENT_H

#include <QtCore/QMap>
#include <QtMqtt/QMqttClient>
#include <QtMqtt/QMqttSubscription>
#include <QtMqtt/QMqttMessage>

class QmlMqttClient;

class QmlMqttClient : public QMqttClient
{
Q_OBJECT

public:
QmlMqttClient(QObject *parent = nullptr);

QMqttSubscription *QmlMqttClient::subscribe(const QMqttTopicFilter &topic, quint8 qos = 0);
Q_INVOKABLE qint32 publish(const QMqttTopicName &topic, const QByteArray &message = QByteArray(),
quint8 qos = 0, bool retain = false);

public slots:
void handleOpen();
void handleClose();
void handleSub();

private:
Q_DISABLE_COPY(QmlMqttClient)

private slots:
void brokerDisconnected();

};

#endif // QMLMQTTCLIENT_H

qmlmqttclient.cpp

#include <QtMqtt/QMqttSubscription>
#include <QtMqtt/QMqttTopicFilter>
#include <QMqttTopicName>
#include <QtMqtt/QMqttClient>
#include <QMqttClient>
#include <QMqttSubscription>
#include <QDateTime>
#include <QDebug>
#include <QtQuick>

#include "qmlmqttclient.h"#include "hmicontroller.h"
QmlMqttClient::QmlMqttClient( QObject *parent)
: QMqttClient(parent)
{

this->setHostname("192.168.137.82");
this->setPort(1883);
this->connectToHost();

if (ClientState::Disconnected)
{
connect(this, &QmlMqttClient::disconnected, this, &QmlMqttClient::brokerDisconnected);
qDebug() << "Broker disconnected";
} else if (ClientState::Connecting)
{
qDebug() << "Connecting to MqttBroker ..." << this->clientId();
}

connect(this, &QMqttClient::messageReceived, this, [this](const QByteArray &message, const QMqttTopicName &topic) {
qDebug() << QDateTime::currentDateTime().toString()
+ QLatin1String(" Received Topic: ")
+ topic.name()
+ QLatin1String(" Message: ")
+ message
+ QLatin1Char('\n');

});

}

qint32 QmlMqttClient::publish(const QMqttTopicName &topic, const QByteArray &message,
quint8 qos, bool retain)
{
return QMqttClient::publish(topic, message, qos, retain);
}

void QmlMqttClient::handleOpen()
{
QString msg = "AUF";
const QMqttTopicName *topic = new QMqttTopicName("lock");
publish(*topic, msg.toUtf8() ,0);
}

void QmlMqttClient::handleClose()
{
QString msg = "ZU";
const QMqttTopicName *topic = new QMqttTopicName("lock");
publish(*topic, msg.toUtf8() ,0);
}

QMqttSubscription *QmlMqttClient::subscribe(const QMqttTopicFilter &topic, quint8 qos)
{
qDebug() << "Subscribed" << this->clientId();
return QMqttClient::subscribe(topic, qos);
}

//Called from hmicontroller
void QmlMqttClient::handleSub()
{
const QMqttTopicFilter *topic = new QMqttTopicFilter("button");

subscribe(*topic, quint8(0));

qDebug() << "Subscribed";
}void QmlMqttClient::brokerDisconnected()
{
qDebug() << "Session closed";
}

Большое спасибо за вашу помощь и, кстати, я также новичок в c ++ и qt. Так что извините за не очень хороший написанный код.

0

Решение

Итак, я нашел свою проблему. Подписчик не подписался на указанную мной тему из-за быстрой загрузки этого метода. С задержкой теперь работает нормально.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]