mirror of
https://github.com/JasonYANG170/IOTConnect-PC.git
synced 2024-11-23 12:16:49 +00:00
270 lines
8.7 KiB
C++
270 lines
8.7 KiB
C++
#include "dialog.h"
|
||
#include "ui_dialog.h"
|
||
#include <QtMqtt/QtMqtt>
|
||
#include <QMessageBox>
|
||
QStringList parts;
|
||
QByteArray byteArray;
|
||
QString formattedVersion;
|
||
QString newves;
|
||
QString ID;
|
||
QString remainderx;
|
||
Dialog::Dialog(const QString& text, QWidget *parent) :
|
||
QDialog(parent),
|
||
ui(new Ui::Dialog),
|
||
client(new QMqttClient(this))
|
||
{
|
||
ui->setupUi(this);
|
||
setWindowTitle("设备管理");
|
||
ID=text;
|
||
ui->label_6->setText("设备ID:"+text);
|
||
trimmedText = text.mid(2); // 从索引2(即"fp"之后)开始截取文本
|
||
|
||
client->setHostname("url");
|
||
client->setPort(123);
|
||
client->setClientId("clientid");
|
||
client->connectToHost();
|
||
|
||
QObject::connect(client, &QMqttClient::connected, [this]() {
|
||
qDebug() << "Connected to MQTT broker!";
|
||
// 订阅主题
|
||
QMqttTopicFilter filter("Flowerpot");
|
||
client->subscribe(filter);
|
||
});
|
||
|
||
QObject::connect(client, &QMqttClient::messageReceived, [this](const QByteArray& message, const QMqttTopicName& topic) {
|
||
QString messageContent = message;
|
||
QString desiredPrefix = "#ID" + trimmedText;
|
||
formattedVersion ="";
|
||
if (messageContent.startsWith(desiredPrefix)) {
|
||
|
||
ui->label_7->setText("设备状态:在线");
|
||
QString messageString = QString::fromUtf8(message);
|
||
qDebug() << "Received message:" << message << "from topic:" << topic.name();
|
||
parts = messageString.split('#');
|
||
|
||
for (const QString& part : parts) {
|
||
qDebug() << "Split part:" << part;
|
||
}
|
||
QString firmwareVersion = parts[8];
|
||
int versionNumber = firmwareVersion.toInt(); // 将字符串转换为整数
|
||
|
||
int x = versionNumber / 100; // 获取百位数
|
||
int y = (versionNumber / 10) % 10; // 获取十位数
|
||
int z = versionNumber % 10; // 获取个位数
|
||
|
||
formattedVersion = QString("V%1.%2.%3").arg(x).arg(y).arg(z); // 创建格式化后的版本号字符串
|
||
ui->label_8->setText("固件版本:"+formattedVersion);
|
||
ui->label_3->setText(parts[2]+"%");
|
||
ui->label_4->setText(parts[4]+"%");
|
||
ui->label_5->setText(parts[3]+"%");
|
||
if(parts[6]=="1"){
|
||
ui->pushButton->setStyleSheet("background-color: red;");
|
||
}else{
|
||
ui->pushButton->setStyleSheet("background-color: white;");
|
||
}
|
||
if(parts[7]=="1"){
|
||
ui->pushButton_2->setStyleSheet("background-color: red;");
|
||
}else{
|
||
ui->pushButton_2->setStyleSheet("background-color: white;");
|
||
}
|
||
if(parts[5]=="1"){
|
||
ui->pushButton_3->setStyleSheet("background-color: red;");
|
||
}else{
|
||
ui->pushButton_3->setStyleSheet("background-color: white;");
|
||
}
|
||
ui->checkBox->blockSignals(true);
|
||
if (parts[9] == "1") {
|
||
ui->checkBox->setCheckState(Qt::Checked); // 设置为选中状态
|
||
} else {
|
||
ui->checkBox->setCheckState(Qt::Unchecked); // 设置为未选中状态
|
||
}
|
||
ui->checkBox->blockSignals(false);
|
||
} else {
|
||
// 忽略其他的消息
|
||
}
|
||
});
|
||
//更新检查服务器
|
||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||
QUrl url("updata url");
|
||
QNetworkRequest request(url);
|
||
|
||
// Set unsafe SSL configuration
|
||
QSslConfiguration config = request.sslConfiguration();
|
||
config.setPeerVerifyMode(QSslSocket::VerifyNone);
|
||
request.setSslConfiguration(config);
|
||
|
||
QNetworkReply *reply = manager->get(request);
|
||
|
||
// Connect to the finished signal
|
||
connect(reply, &QNetworkReply::finished, [=]() {
|
||
if (reply->error() == QNetworkReply::NoError) {
|
||
// Read the JSON data
|
||
QByteArray data = reply->readAll();
|
||
|
||
// Display the JSON data in a message box
|
||
QJsonDocument jsonDoc = QJsonDocument::fromJson(QString(data).toUtf8());
|
||
QJsonObject jsonObj = jsonDoc.object();
|
||
|
||
// 获取数据
|
||
QJsonObject jObj2 = jsonDoc["data"].toObject();
|
||
QString str = jObj2 ["content"].toString();
|
||
qDebug() << str;
|
||
newves = str.left(6); // 提取前6个字符组成newves
|
||
|
||
remainderx = str.mid(6); // 提取剩下的字符
|
||
remainderx.replace("#", "\n");
|
||
qDebug() << "update1111111";
|
||
qDebug() << newves;
|
||
qDebug() << formattedVersion;
|
||
if (newves != formattedVersion) {
|
||
// QMessageBox::warning(this, "Error", "已发布新版本\"" + info + "\"。\n点击\"设置\"下载最新版本。");
|
||
// ui->pushButton_4->setText("发现新版本");
|
||
ui->pushButton_6->setStyleSheet("background-color: red;");
|
||
ui->pushButton_6->setText("发现新版本!");
|
||
qDebug() << "update";
|
||
}
|
||
else {
|
||
// ui->pushButton_4->setText("暂无更新");
|
||
qDebug() << "no";
|
||
}
|
||
}
|
||
else {
|
||
// Display an error message
|
||
QMessageBox::warning(this, "Error", reply->errorString());
|
||
}
|
||
|
||
// Clean up
|
||
reply->deleteLater();
|
||
manager->deleteLater();
|
||
});
|
||
}
|
||
|
||
Dialog::~Dialog()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
|
||
|
||
void Dialog::on_pushButton_clicked()
|
||
{
|
||
if (client->state() == QMqttClient::Connected) {
|
||
QMqttTopicName topic("Flowerpot");
|
||
if (parts[6]=="1") {
|
||
QString str = "#IDTO" + trimmedText+"&OFFHOT";
|
||
byteArray = str.toUtf8();
|
||
}else{
|
||
QString str = "#IDTO" + trimmedText+"&ONHOT";
|
||
byteArray = str.toUtf8();
|
||
}
|
||
|
||
|
||
client->publish(topic, byteArray, 0, false);
|
||
// 发送消息后做其他处理
|
||
} else {
|
||
QMessageBox::warning(this, "Error", "MQTT client is not connected!");
|
||
}
|
||
}
|
||
|
||
|
||
void Dialog::on_pushButton_2_clicked()
|
||
{
|
||
if (client->state() == QMqttClient::Connected) {
|
||
QMqttTopicName topic("Flowerpot");
|
||
if (parts[7]=="1") {
|
||
QString str = "#IDTO" + trimmedText+"&OFFLED";
|
||
byteArray = str.toUtf8();
|
||
}else{
|
||
QString str = "#IDTO" + trimmedText+"&ONLED";
|
||
byteArray = str.toUtf8();
|
||
}
|
||
|
||
|
||
client->publish(topic, byteArray, 0, false);
|
||
// 发送消息后做其他处理
|
||
} else {
|
||
QMessageBox::warning(this, "Error", "MQTT client is not connected!");
|
||
}
|
||
}
|
||
|
||
|
||
void Dialog::on_pushButton_3_clicked()
|
||
{
|
||
if (client->state() == QMqttClient::Connected) {
|
||
QMqttTopicName topic("Flowerpot");
|
||
if (parts[5]=="1") {
|
||
QString str = "#IDTO" + trimmedText+"&OFFPUMP";
|
||
byteArray = str.toUtf8();
|
||
}else{
|
||
QString str = "#IDTO" + trimmedText+"&ONPUMP";
|
||
byteArray = str.toUtf8();
|
||
}
|
||
|
||
|
||
client->publish(topic, byteArray, 0, false);
|
||
// 发送消息后做其他处理
|
||
} else {
|
||
QMessageBox::warning(this, "Error", "MQTT client is not connected!");
|
||
}
|
||
}
|
||
|
||
|
||
void Dialog::on_pushButton_4_clicked()
|
||
{
|
||
// 实例化第二个 Dialog2 对象
|
||
Dialog2 dialog2;
|
||
|
||
// 显示第二个 Dialog2
|
||
dialog2.exec();
|
||
}
|
||
|
||
void Dialog::on_pushButton_5_clicked()
|
||
{
|
||
|
||
}
|
||
|
||
void Dialog::on_pushButton_6_clicked()
|
||
{
|
||
form* formDialog = new form(ID, formattedVersion,newves,remainderx,this); // 使用其他名称替换 'form'
|
||
formDialog->show();
|
||
}
|
||
|
||
|
||
void Dialog::on_checkBox_stateChanged(int arg1)
|
||
{
|
||
if (arg1 == Qt::Checked) {
|
||
qDebug() << "复选框被选中";
|
||
// 根据选中状态执行特定操作
|
||
if (client->state() == QMqttClient::Connected) {
|
||
QMqttTopicName topic("Flowerpot");
|
||
QString str = "#IDTO" + trimmedText+"&ONAUTO";
|
||
byteArray = str.toUtf8();
|
||
client->publish(topic, byteArray, 0, false);
|
||
// 发送消息后做其他处理
|
||
} else {
|
||
QMessageBox::warning(this, "Error", "MQTT client is not connected!");
|
||
}
|
||
} else if (arg1 == Qt::Unchecked) {
|
||
qDebug() << "复选框未被选中";
|
||
// 根据未选中状态执行特定操作
|
||
if (client->state() == QMqttClient::Connected) {
|
||
QMqttTopicName topic("Flowerpot");
|
||
QString str = "#IDTO" + trimmedText+"&OFFAUTO";
|
||
byteArray = str.toUtf8();
|
||
client->publish(topic, byteArray, 0, false);
|
||
// 发送消息后做其他处理
|
||
} else {
|
||
QMessageBox::warning(this, "Error", "MQTT client is not connected!");
|
||
}
|
||
}
|
||
}
|
||
|
||
void Dialog::closeEvent(QCloseEvent *event)
|
||
{
|
||
// 断开 MQTT 连接
|
||
client->disconnectFromHost();
|
||
|
||
// 调用父类的关闭事件处理函数
|
||
QDialog::closeEvent(event);
|
||
}
|