#include 'aircondition.h' #include 'ui_aircondition.h' #include 'switchform.h' #include 'lcdform.h' #include 'sqlite.h' #include #include #include #include #include

AirCondition::AirCondition(int userid,QWidget *parent) : QWidget(parent), ui(new Ui::AirCondition), userid(userid) { ui->setupUi(this); airConditionWidget(); //连接开关组件的信号和自定义的槽函数 connect(ui->SwitchStatus,&SwitchForm::statusChanged,this,&AirCondition::switchButton_status);

// 加载上次更改的状态
loadLastStatus();

}

AirCondition::~AirCondition() { delete ui; }

void AirCondition::airConditionWidget() { setWindowTitle('空调设置'); //设置ui组件背景 setAutoFillBackground(true); QPalette palette=this->palette(); QPixmap pixmap(':/user/image/image/aircondition.jpg'); palette.setBrush(QPalette::Window, QBrush(pixmap)); setPalette(palette); setFixedSize(600,400); }

bool AirCondition::switchButton_status(bool checked) { qDebug()<<checked; flag=checked; updateSmartHomeStatus(userid, QString('空调'), checked ? QString('开启') : QString('关闭'), QString::number(ui->temperature->getValue())); return flag; }

void AirCondition::loadLastStatus() { qDebug()<userid; QString state = getLastState(this->userid); QString temp = getLastTemperature(this->userid); qDebug()<<temp; if (state=="开启") { ui->SwitchStatus->setChecked(true); ui->temperature->setValue(temp.toInt()); } else { ui->SwitchStatus->setChecked(false); ui->temperature->setValue(0); } qDebug()<<temp.toInt();

// 如果界面上显示开启状态,但存入数据库的设备状态为关闭,则更新数据库中的状态为开启
if (ui->SwitchStatus->checked() && state == "关闭") {
    updateSmartHomeStatus(userid, QString("空调"), QString("开启"), temp);
}

}

QString AirCondition::getLastTemperature(int userid) { QString queryStr = QString("SELECT value FROM Status WHERE uid = %1 AND device_name = '空调' ORDER BY sid DESC LIMIT 1").arg(userid); qDebug()<<queryStr<<userid; QSqlQuery query; qDebug ()<<query.exec(queryStr); if (query.exec(queryStr) && query.next()) { return query.value(0).toString(); } else { qDebug() << "未得到上一次温度: " << query.lastError().text(); return ""; } }

void AirCondition::updateLastTemperature(int userid,QString temperature) { Sqlite::sqlite_init(); QString queryStr = QString("UPDATE Status SET value = '%1' WHERE uid = %2 AND device_name = '空调'").arg(temperature).arg(userid); QSqlQuery query; if (!query.exec(queryStr)) { qDebug() << "更新温度失败: " << query.lastError().text(); } }

QString AirCondition::getLastState(int userid) { QString queryStr = QString("SELECT device_state FROM Status WHERE uid = %1 AND device_name = '空调' ORDER BY sid DESC LIMIT 1").arg(userid); qDebug()<<queryStr<<userid; QSqlQuery query; qDebug ()<<query.exec(queryStr); if (query.exec(queryStr) && query.next()) { return query.value(0).toString(); } else { qDebug() << "未得到上一次状态: " << query.lastError().text(); return ""; } }

#include #include #include #include #include #include "sqlite.h"

void Sqlite::sqlite_init() { // 先关闭重复的数据库连接 if (QSqlDatabase::contains("qt_sql_default_connection")) { QSqlDatabase::removeDatabase("qt_sql_default_connection"); } QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("../Smarthome_Client/database/database.db"); if(!db.open()) { qDebug() << "无法打开数据库!"; } else{ qDebug() << "数据库打开成功!"; } }

// 更新智能家居状态表中的数据 void updateSmartHomeStatus(int userId, QString deviceName, QString devicestate,QString newValue) { // 执行更新操作 QSqlQuery query; query.prepare("SELECT * FROM Status WHERE uid = :userId"); query.bindValue(":userId", userId); if (!query.exec()) { qDebug() << "查询id失败:" << query.lastError().text(); } QString sql = QString("INSERT INTO Status (uid, device_name, device_state, value) VALUES (%1, '%2', '%3', '%4')") .arg(userId).arg(deviceName).arg(devicestate).arg(newValue); query.prepare(sql); if (!query.exec()) { qDebug() << "插入数据失败:" << query.lastError().text(); return; } }

空调控制界面 - 智能家居系统

原文地址: https://www.cveoy.top/t/topic/fGNK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录