#include "mqttclient.h" #include #include MqttClient* MqttClient::instance = nullptr; MqttClient::MqttClient(QObject *parent) : QObject(parent), mqClient(new QMqttClient(this)) { // 连接信号和槽 connect(mqClient, &QMqttClient::connected, this, &MqttClient::onConnected); // connect(mqClient, &QMqttClient::disconnected, this, &MqttClient::onDisconnected); connect(mqClient, &QMqttClient::stateChanged, this, &MqttClient::onStateChanged); connect(mqClient, &QMqttClient::errorChanged, this, &MqttClient::onError); connect(mqClient, &QMqttClient::messageReceived, this, &MqttClient::onMessageReceived); connect(mqClient, &QMqttClient::errorChanged, this, [this](QMqttClient::ClientError error) { qDebug() << "MQTT Error:" << error; }); connect(mqClient, &QMqttClient::connected, this, &MqttClient::connected); } // 单例模式 MqttClient* MqttClient::getInstance() { if (instance == nullptr) { instance = new MqttClient(); } return instance; } MqttClient* MqttClient::createNewInstance() { return new MqttClient(); } void MqttClient::connectToMqttBroker() { qDebug() << "MQTT 1511: " ; mqClient->setHostname("114.55.233.194"); mqClient->setPort(1883); // // 设置账号和密码 mqClient->setUsername("hxgc"); mqClient->setPassword("hxgc123456"); // 设置客户端 ID mqClient->setClientId("pc"); mqClient->connectToHost(); } void MqttClient::connectToMqttBroker(const QString& hostname, quint16 port, const QString& username, const QString& password, const QString& clientId,const QStringList& topicsToSubscribe) { qDebug() << "MQTT 1511: " ; mqClient->setHostname(hostname); mqClient->setPort(port); // 设置账号和密码 mqClient->setUsername(username); mqClient->setPassword(password); // 设置客户端 ID mqClient->setClientId(clientId); mqClient->connectToHost(); // 保存要订阅的主题列表 m_subscribeTopics = topicsToSubscribe; } void MqttClient::onConnected() { subscribeToTopics(m_subscribeTopics); } void MqttClient::subscribeToTopics(const QStringList& topics) { for (const auto& topic : topics) { subscribeToTopic(topic); } } void MqttClient::subscribeToTopic(const QString &topic) { mqClient->subscribe(topic); } void MqttClient:: sendMessage(const QString& topic, const QByteArray& message) { if (mqClient->state() == QMqttClient::Connected) { auto pub = mqClient->publish(QMqttTopicName(topic), message); if (pub == -1) qDebug() << "Could not publish message"; else qDebug() << "Message published"<