#include "mainwindow.h"
#include "subscriptionwindow.h"
#include "ui_mainwindow.h"
#include <QtCore/QDateTime>
#include <QtMqtt/QMqttClient>
#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->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]() {
ui->buttonPing->setEnabled(true);
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->spinBoxPort, QOverload<int>::of(&QSpinBox::valueChanged), this, &MainWindow::setClientPort);
connect(ui->lineEditUser, &QLineEdit::textChanged, m_client, &QMqttClient::setUsername);
connect(ui->lineEditPassword, &QLineEdit::textChanged, m_client, &QMqttClient::setPassword);
updateLogStateChange();
}
MainWindow::~MainWindow()
{
delete ui;
qApp->quit();
}
void MainWindow::on_buttonConnect_clicked()
{
if (m_client->state() == QMqttClient::Disconnected) {
ui->lineEditHost->setEnabled(false);
ui->spinBoxPort->setEnabled(false);
ui->lineEditUser->setEnabled(false);
ui->lineEditPassword->setEnabled(false);
ui->buttonConnect->setText(tr("Disconnect"));
m_client->connectToHost();
} else {
ui->lineEditHost->setEnabled(true);
ui->spinBoxPort->setEnabled(true);
ui->lineEditUser->setEnabled(true);
ui->lineEditPassword->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->lineEditUser->setEnabled(true);
ui->lineEditPassword->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->text(),
ui->lineEditMessage->text().toUtf8(),
ui->spinQoS_2->text().toUInt(),
ui->checkBoxRetain->isChecked()) == -1)
QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not publish message"));
}
void MainWindow::on_buttonSubscribe_clicked()
{
auto subscription = m_client->subscribe(ui->lineEditTopic->text(), ui->spinQoS->text().toUInt());
if (!subscription) {
QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not subscribe. Is there a valid connection?"));
return;
}
auto subWindow = new SubscriptionWindow(subscription);
subWindow->setWindowTitle(subscription->topic().filter());
subWindow->show();
}
void MainWindow::on_buttonPing_clicked()
{
ui->buttonPing->setEnabled(false);
m_client->requestPing();
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT测试MQTT通信代码
共8个文件
cpp:3个
ui:2个
h:2个
需积分: 0 47 下载量 122 浏览量
2023-03-13
16:31:23
上传
评论
收藏 6KB ZIP 举报
温馨提示
MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,最初由IBM开发,现已成为OASIS标准。MQTT协议被广泛应用于物联网设备之间的通信和传输数据。 MQTT协议具有以下特点: 轻量级:MQTT协议设计为轻量级协议,适用于带宽较低、网络连接不稳定的设备之间的通信。 基于发布/订阅模式:MQTT协议采用发布/订阅模式,消息发布者不需要知道谁会接收消息,只需要将消息发布到一个主题(Topic)上,所有订阅该主题的客户端都可以收到该消息。 可靠性:MQTT协议支持多种消息传输质量等级,包括最多一次(At most once)、至少一次(At least once)和恰好一次(Exactly once)。 可扩展性:MQTT协议可以通过扩展机制来支持更复杂的通信场景。 安全性:MQTT协议支持基于TLS/SSL的安全传输,并且可以使用用户名/密码进行认证授权。 MQTT协议的应用场景包括但不限于:物联网设备间的消息传输、移动应用程序推送通知、即时通讯等。
资源推荐
资源详情
资源评论
收起资源包目录
mqttTest.zip (8个子文件)
mqttTest
mainwindow.h 763B
subscriptionwindow.ui 2KB
mainwindow.cpp 4KB
main.cpp 186B
mainwindow.ui 8KB
mqttTest.pro 1KB
subscriptionwindow.h 673B
subscriptionwindow.cpp 2KB
共 8 条
- 1
资源评论
m晴朗
- 粉丝: 7053
- 资源: 110
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功