mirror of
https://github.com/JasonYANG170/IOTConnect-PC.git
synced 2024-11-23 12:16:49 +00:00
313 lines
10 KiB
C++
313 lines
10 KiB
C++
#include <QInputDialog>
|
||
#include "mainwindow.h"
|
||
#include "qjsondocument.h"
|
||
#include "qjsonobject.h"
|
||
#include "qnetworkaccessmanager.h"
|
||
#include "qnetworkreply.h"
|
||
#include "ui_mainwindow.h"
|
||
#include <QApplication>
|
||
#include <QGroupBox>
|
||
#include <QPushButton>
|
||
#include <QVBoxLayout>
|
||
#include <QMessageBox>
|
||
#include <functional>
|
||
#include <QCloseEvent>
|
||
|
||
#include <QSettings>
|
||
QString newves33;
|
||
QString ves33="V1.0.0";
|
||
QString remainderx33;
|
||
MainWindow::MainWindow(QWidget *parent)
|
||
: QMainWindow(parent)
|
||
, ui(new Ui::MainWindow)
|
||
{
|
||
ui->setupUi(this);
|
||
setWindowTitle("万物互联IOT桌面端");
|
||
// 恢复上次保存的按钮信息
|
||
restoreButtonSettings();
|
||
//更新检查连接
|
||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||
QUrl url("api1url");
|
||
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;
|
||
newves33 = str.left(6); // 提取前6个字符组成newves
|
||
|
||
remainderx33 = str.mid(6); // 提取剩下的字符
|
||
remainderx33.replace("#", "\n");
|
||
qDebug() << "update1111111";
|
||
qDebug() << newves33;
|
||
qDebug() << ves33;
|
||
if (newves33 != ves33) {
|
||
// QMessageBox::warning(this, "Error", "已发布新版本\"" + info + "\"。\n点击\"设置\"下载最新版本。");
|
||
ui->pushButton->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();
|
||
});
|
||
everyday();
|
||
everyEinglish();
|
||
}
|
||
|
||
MainWindow::~MainWindow()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void MainWindow::on_pushButton_clicked()
|
||
{
|
||
form* formDialog = new form("",ves33,newves33,remainderx33,this); // 使用其他名称替换 'form'
|
||
formDialog->show();
|
||
|
||
}
|
||
|
||
void MainWindow::onNewButtonClicked()
|
||
{
|
||
// 在新按钮被点击时执行的操作
|
||
qDebug() << "New Button Clicked";
|
||
}
|
||
|
||
void MainWindow::on_pushButton_2_clicked()
|
||
{
|
||
// 创建一个新的 addButton
|
||
|
||
|
||
// 创建输入对话框
|
||
bool ok;
|
||
QString buttonText = QInputDialog::getText(this, "添加设备", "请输入设备ID:", QLineEdit::Normal, "", &ok);
|
||
|
||
// 如果用户点击了“OK”按钮,则设置按钮的文本名称为输入的内容
|
||
if (ok && !buttonText.isEmpty()) {
|
||
|
||
if (buttonText.contains("fp")) {
|
||
QPushButton* newButton = new QPushButton("Add Button", ui->groupBox);
|
||
|
||
// 获取已存在的布局对象
|
||
QVBoxLayout* layout = ui->verticalLayout;
|
||
|
||
// 添加新的 addButton 到布局
|
||
layout->addWidget(newButton);
|
||
newButton->setText("Flowerpot\nID:"+buttonText);
|
||
// 连接新按钮的 clicked 信号到 lambda 函数
|
||
connect(newButton, &QPushButton::clicked, [=]() {
|
||
// 获取当前按钮的索引
|
||
int buttonIndex = layout->indexOf(newButton) + 1;
|
||
// 显示当前按钮的索引
|
||
|
||
// 如果 addButton 文本名称包含 "fp",则弹出相应的窗口
|
||
if (buttonText.contains("fp")) {
|
||
QString fpText = buttonText.mid(buttonText.indexOf("fp"));
|
||
Dialog* dialog = new Dialog(fpText, this);
|
||
dialog->show();
|
||
}
|
||
|
||
// 可以在这里添加其他点击按钮时的操作
|
||
});
|
||
}else{
|
||
QMessageBox::information(this, "设备ID错误", "设备ID错误,检查你输入的设备ID是否正确!" );
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
void MainWindow::saveButtonSettings()
|
||
{
|
||
// 获取已存在的布局对象
|
||
QVBoxLayout* layout = ui->verticalLayout;
|
||
|
||
// 创建 QSettings 对象,用于读写注册表信息
|
||
QSettings settings("IOT", "IOT");
|
||
|
||
// 清空注册表中的旧按钮信息
|
||
settings.remove("Buttons");
|
||
|
||
// 保存每个按钮的文本和索引
|
||
for (int i = 0; i < layout->count(); i++) {
|
||
QPushButton* button = qobject_cast<QPushButton*>(layout->itemAt(i)->widget());
|
||
if (button) {
|
||
QString buttonText = button->text();
|
||
settings.setValue(QString("Buttons/button%1Text").arg(i), buttonText);
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWindow::restoreButtonSettings()
|
||
{
|
||
// 获取已存在的布局对象
|
||
QVBoxLayout* layout = ui->verticalLayout;
|
||
|
||
// 创建 QSettings 对象,用于读写注册表信息
|
||
QSettings settings("IOT", "IOT");
|
||
|
||
// 遍历按钮索引,读取注册表中的按钮信息,并添加按钮到布局
|
||
int buttonIndex = 0;
|
||
while (true) {
|
||
QString buttonText = settings.value(QString("Buttons/button%1Text").arg(buttonIndex)).toString();
|
||
if (buttonText.isEmpty()) {
|
||
break; // 没有更多的按钮信息可读取,退出循环
|
||
}
|
||
|
||
QPushButton* newButton = new QPushButton(buttonText, ui->groupBox);
|
||
layout->addWidget(newButton);
|
||
|
||
// 连接按钮的 clicked 信号到槽函数
|
||
connect(newButton, &QPushButton::clicked, [=]() {
|
||
// 显示按钮索引
|
||
// QMessageBox::information(this, "Button Index", "This is button number " + QString::number(buttonIndex));
|
||
if (buttonText.contains("fp")) {
|
||
QString fpText = buttonText.mid(buttonText.indexOf("fp"));
|
||
Dialog* dialog = new Dialog(fpText, this);
|
||
dialog->show();
|
||
}
|
||
// 可以在这里添加按钮点击时的操作
|
||
});
|
||
|
||
buttonIndex++;
|
||
}
|
||
}
|
||
|
||
void MainWindow::closeEvent(QCloseEvent* event)
|
||
{
|
||
saveButtonSettings();
|
||
event->accept();
|
||
}
|
||
void MainWindow::everyday()
|
||
{
|
||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||
QUrl url("updataurl");
|
||
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();
|
||
|
||
// 获取数据
|
||
QString city = jsonObj["city"].toString();
|
||
QJsonObject jObj2 = jsonDoc["info"].toObject();
|
||
QString high = jObj2 ["high"].toString();
|
||
QString low = jObj2 ["low"].toString();
|
||
QString date = jObj2 ["date"].toString();
|
||
QString week = jObj2 ["week"].toString();
|
||
QString type = jObj2 ["type"].toString();
|
||
QJsonObject jObj23 = jObj2["air"].toObject();
|
||
QString aqiname = jObj23 ["aqi_name"].toString();
|
||
QString tip =jObj2["tip"].toString();
|
||
QString info = city+" "+date+" "+week+" "+type+"\n温度:"+low+"-"+high+" 空气质量:"+aqiname;
|
||
ui->label_2->setWordWrap(true);
|
||
ui->label_2->setText("每日天气:\n\n"+info);
|
||
}
|
||
else {
|
||
// Display an error message
|
||
QMessageBox::warning(this, "Error", reply->errorString());
|
||
}
|
||
|
||
// Clean up
|
||
reply->deleteLater();
|
||
manager->deleteLater();
|
||
});
|
||
}
|
||
|
||
void MainWindow::everyEinglish()
|
||
{
|
||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||
QUrl url("api2url");
|
||
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 key1Val = jObj2["zh"].toString();
|
||
QString key1Val2 = jObj2["en"].toString();
|
||
ui->label_3->setWordWrap(true);
|
||
ui->label_3->setText("每日英语:\n\n"+key1Val2);
|
||
// QMessageBox::information(this, "JSON Data", key1Val2);
|
||
|
||
} else {
|
||
// Display an error message
|
||
QMessageBox::warning(this, "Error", reply->errorString());
|
||
}
|
||
|
||
// Clean up
|
||
reply->deleteLater();
|
||
manager->deleteLater();
|
||
});
|
||
}
|
||
|
||
void MainWindow::on_pushButton_3_clicked()
|
||
{
|
||
// 获取信号的发送者
|
||
QVBoxLayout* layout = ui->verticalLayout;
|
||
QLayoutItem* item;
|
||
while ((item = layout->takeAt(0)) != nullptr) {
|
||
if (item->widget()) {
|
||
delete item->widget();
|
||
}
|
||
delete item;
|
||
}
|
||
}
|
||
|