代码续写:要求用户在UserWidget界面点击QComboBox可以选择睡眠模式日常模式节能模式睡眠模式:空调温度27加湿器湿度50窗帘100;日常模式:空调温度25加湿器湿度60窗帘05;节能模式:空调温度26加湿器湿度40窗帘03用户选择模式后SQlite的Status表内数据改变#include userswidgeth#include ui_userswidgeth#include li
在UsersWidget类中,添加一个槽函数来处理QComboBox的选择变化事件。在该槽函数中,根据用户选择的模式,更新Status表中对应设备的数据。
首先,在UsersWidget类的头文件中添加一个私有成员变量,用于存储当前用户的ID:
private:
int userId;
然后,在UsersWidget类的构造函数中,将传入的用户ID保存到成员变量中:
UsersWidget::UsersWidget(int userid,QWidget *parent) :
QWidget(parent),
ui(new Ui::UsersWidget),
userId(userid)
{
//...
}
接下来,在UsersWidget类中添加一个槽函数来处理QComboBox的选择变化事件:
private slots:
void on_modeComboBox_currentIndexChanged(const QString &mode);
然后在构造函数中连接QComboBox的currentIndexChanged信号到该槽函数:
connect(ui->modeComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(on_modeComboBox_currentIndexChanged(const QString&)));
在槽函数中,根据用户选择的模式,更新Status表中对应设备的数据:
void UsersWidget::on_modeComboBox_currentIndexChanged(const QString &mode)
{
if (mode == "睡眠模式") {
updateSmartHomeStatus(userId, "空调", "温度", "27");
updateSmartHomeStatus(userId, "加湿器", "湿度", "50");
updateSmartHomeStatus(userId, "窗帘", "开度", "100");
} else if (mode == "日常模式") {
updateSmartHomeStatus(userId, "空调", "温度", "25");
updateSmartHomeStatus(userId, "加湿器", "湿度", "60");
updateSmartHomeStatus(userId, "窗帘", "开度", "0.5");
} else if (mode == "节能模式") {
updateSmartHomeStatus(userId, "空调", "温度", "26");
updateSmartHomeStatus(userId, "加湿器", "湿度", "40");
updateSmartHomeStatus(userId, "窗帘", "开度", "0.3");
}
}
最后,根据更新SmartHomeStatus函数的定义,将其移动到UsersWidget类的实现文件中,并修改函数名为UsersWidget::updateSmartHomeStatus。
完整代码如下:
#include "userswidget.h"
#include "ui_userswidget.h"
#include "lights.h"
#include "aircondition.h"
#include "curtains.h"
#include "humidiffer.h"
#include "information.h"
#include "procession.h"
#include "QCloseEvent"
#include "QMessageBox"
UsersWidget::UsersWidget(int userid,QWidget *parent) :
QWidget(parent),
ui(new Ui::UsersWidget),
userId(userid)
{
ui->setupUi(this);
displayUsersWidget();
connect(ui->lights,&QToolButton::clicked,this,[=]{
Lights *w = new Lights(userid);
w->show();});
connect(ui->air_condition,&QToolButton::clicked,this,[=]{
AirCondition *w = new AirCondition(userid);
w->show();});
connect(ui->curtains,&QToolButton::clicked,this,[=]{
Curtains *w = new Curtains(userid);
w->show();});
connect(ui->humidifiers,&QToolButton::clicked,this,[=]{
Humidiffer *w = new Humidiffer(userid);
w->show();});
connect(ui->tables,&QToolButton::clicked,this,[=]{
Information *w = new Information;
w->show();});
connect(ui->wifi,&QToolButton::clicked,this,[=]{
Procession *w = new Procession;
w->show();});
connect(ui->modeComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(on_modeComboBox_currentIndexChanged(const QString&)));
}
UsersWidget::~UsersWidget()
{
delete ui;
}
void UsersWidget::displayUsersWidget()
{
setWindowTitle("智能家居总览图");
setFixedSize(900,600);
}
void UsersWidget::closeEvent(QCloseEvent *e)
{
if(e->spontaneous())
{
//窗口关闭时弹出的提示窗口
QMessageBox::StandardButton reply;
reply = QMessageBox::information(this,"提示","确认退出智能管家系统?",QMessageBox::Yes|QMessageBox::No);
if(reply == QMessageBox::Yes){
//若用户点击确认,则接收这个事件,当前窗口会关闭
e->accept();
}else{
//若用户点击取消,则忽略这个事件,当前窗口不会关闭
e->ignore();
}
}
}
void UsersWidget::on_modeComboBox_currentIndexChanged(const QString &mode)
{
if (mode == "睡眠模式") {
updateSmartHomeStatus(userId, "空调", "温度", "27");
updateSmartHomeStatus(userId, "加湿器", "湿度", "50");
updateSmartHomeStatus(userId, "窗帘", "开度", "100");
} else if (mode == "日常模式") {
updateSmartHomeStatus(userId, "空调", "温度", "25");
updateSmartHomeStatus(userId, "加湿器", "湿度", "60");
updateSmartHomeStatus(userId, "窗帘", "开度", "0.5");
} else if (mode == "节能模式") {
updateSmartHomeStatus(userId, "空调", "温度", "26");
updateSmartHomeStatus(userId, "加湿器", "湿度", "40");
updateSmartHomeStatus(userId, "窗帘", "开度", "0.3");
}
}
// 更新智能家居状态表中的数据
void UsersWidget::updateSmartHomeStatus(int userId, QString deviceName, QString devicestate,QString newValue)
{
Sqlite::sqlite_init();
// 执行更新操作
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;
}
}
请注意,上述代码中的updateSmartHomeStatus函数仅是一个示例实现,具体的更新操作可能需要根据你的数据库结构和需求进行修改。另外,还需要确保在使用该函数之前已经正确初始化了数据库连接
原文地址: https://www.cveoy.top/t/topic/izyA 著作权归作者所有。请勿转载和采集!