#include "mqtt.h"
#include "ui_mqtt.h"
#include <QtCore/QDateTime>
#include <QtMqtt/qmqttclient.h>
#include <QtWidgets/QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_client = new QMqttClient(this);
m_client->setHostname(ui->lineEditHost->text());
m_client->setUsername(ui->lineEditHost_2->text());
m_client->setPassword(ui->lineEditHost_3->text());
m_client->setClientId(ui->lineEditHost_4->text());
m_client->setPort(ui->spinBoxPort->value());
connect(m_client, &QMqttClient::stateChanged, this, &MainWindow::updateLogStateChange);
connect(m_client, &QMqttClient::disconnected, this, &MainWindow::brokerDisconnected);
connect(m_client, &QMqttClient::messageReceived, this, [this](const QByteArray &message, const QMqttTopicName &topic) {
const QString content = QDateTime::currentDateTime().toString()
+ QLatin1String(" Received Topic: ")
+ topic.name()
+ QLatin1String(" Message: ")
+ message
+ QLatin1Char('\n');
ui->editLog->insertPlainText(content);
});
connect(m_client, &QMqttClient::pingResponseReceived, this, [this]() {
const QString content = QDateTime::currentDateTime().toString()
+ QLatin1String(" PingResponse")
+ QLatin1Char('\n');
ui->editLog->insertPlainText(content);
});
connect(ui->lineEditHost, &QLineEdit::textChanged, m_client, &QMqttClient::setHostname);
connect(ui->lineEditHost_2, &QLineEdit::textChanged, m_client, &QMqttClient::setUsername);
connect(ui->lineEditHost_3, &QLineEdit::textChanged, m_client, &QMqttClient::setPassword);
connect(ui->lineEditHost_4, &QLineEdit::textChanged, m_client, &QMqttClient::setClientId);
connect(ui->spinBoxPort, QOverload<int>::of(&QSpinBox::valueChanged), this, &MainWindow::setClientPort);
updateLogStateChange();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_buttonConnect_clicked()
{
if (m_client->state() == QMqttClient::Disconnected) {
ui->lineEditHost->setEnabled(false);
ui->lineEditHost_2->setEnabled(false);
ui->lineEditHost_3->setEnabled(false);
ui->lineEditHost_4->setEnabled(false);
ui->spinBoxPort->setEnabled(false);
ui->buttonConnect->setText(tr("Disconnect"));
m_client->connectToHost();
} else {
ui->lineEditHost->setEnabled(true);
ui->lineEditHost_2->setEnabled(true);
ui->lineEditHost_3->setEnabled(true);
ui->lineEditHost_4->setEnabled(true);
ui->spinBoxPort->setEnabled(true);
ui->buttonConnect->setText(tr("Connect"));
m_client->disconnectFromHost();
}
}
void MainWindow::on_buttonQuit_clicked()
{
QApplication::quit();
}
void MainWindow::updateLogStateChange()
{
const QString content = QDateTime::currentDateTime().toString()
+ QLatin1String(": State Change")
+ QString::number(m_client->state())
+ QLatin1Char('\n');
ui->editLog->insertPlainText(content);
}
void MainWindow::brokerDisconnected()
{
ui->lineEditHost->setEnabled(true);
ui->spinBoxPort->setEnabled(true);
ui->buttonConnect->setText(tr("Connect"));
}
void MainWindow::setClientPort(int p)
{
m_client->setPort(p);
}
void MainWindow::on_buttonPublish_clicked()
{
if (m_client->publish(ui->lineEditTopic_2->text(), ui->lineEditMessage->toPlainText().toUtf8()) == -1)
QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not publish message"));
}
void MainWindow::on_buttonSubscribe_clicked()
{
auto subscription = m_client->subscribe(ui->lineEditTopic->text());
if (!subscription) {
QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not subscribe. Is there a valid connection?"));
return;
}
}
void MainWindow::on_buttonSubscribe_2_clicked()
{
ui->editLog->clear();
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
2k1000LA-master.zip (39个子文件)
2k1000LA-master
Qt设计-MQTT
MQTT
mqtt
object_script.Qt5Qmqtt.Debug 647B
Qt5Qmqtt_resource.rc 776B
Makefile.qmqtt.Debug 174KB
object_script.Qt5Qmqtt.Release 687B
Makefile.qmqtt 37KB
Makefile.qmqtt.Release 174KB
include
QtQmqtt
QtQmqttDepends 205B
lib
cmake
Qt5Qmqtt
ExtraSourceIncludes.cmake 377B
Qt5QmqttConfig.cmake 8KB
Qt5QmqttConfigVersion.cmake 298B
pkgconfig
Qt5Qmqtt.pc 301B
Qt5Qmqtt.dll 551KB
libQt5Qmqtt.a 132KB
Qt5Qmqtt.prl 1KB
main.cpp 177B
mqtt.cpp 4KB
MQTT.pro 1KB
mqtt.ui 9KB
MQTT.pro.user 22KB
mqtt.h 708B
LICENSE 9KB
Aeduino相关代码
wifi
wifi.ino 3KB
微信小程序
miniprogram-2
sitemap.json 191B
project.private.config.json 399B
pages
index
index.wxml 376B
index.js 4KB
index.json 7B
index.wxss 175B
logs
logs.js 818B
logs.wxml 64B
app.json 295B
project.config.json 1KB
app.js 364B
utils
mqtt.js 397KB
aliyun
hex_hmac_sha1.js 4KB
aliyun_connect.js 2KB
util.js 472B
app.wxss 194B
.gitignore 350B
共 39 条
- 1
资源评论
- 高温警告2024-05-15请问一下,这是要怎么用?小白不太明白
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6826
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功