代码补充只显示修改部分:用户在UserWidget界面点击QComboBox选择模式SQlite的Status表内数据改变要求点击Lights界面数据同时被更新#ifndef USERSWIDGET_H#define USERSWIDGET_H#include QWidgetnamespace Ui class UsersWidget;class UsersWidget public QWidg
以下是代码补充部分:
在userswidget.cpp中的on_modeComboBox_currentIndexChanged函数中添加代码:
void UsersWidget::on_modeComboBox_currentIndexChanged(const QString &mode)
{
if (mode == "睡眠模式") {
updateSmartHomeStatus(userid, "智能灯", "开启", "20");
updateSmartHomeStatus(userid, "空调", "开启", "27");
updateSmartHomeStatus(userid, "加湿器", "开启", "50");
updateSmartHomeStatus(userid, "窗帘", "开启", "100");
emit modeChanged(); // 发送信号,通知Lights界面更新数据
} else if (mode == "日常模式") {
updateSmartHomeStatus(userid, "智能灯", "开启", "80");
updateSmartHomeStatus(userid, "空调", "开启", "25");
updateSmartHomeStatus(userid, "加湿器", "开启", "60");
updateSmartHomeStatus(userid, "窗帘", "开启", "50");
emit modeChanged(); // 发送信号,通知Lights界面更新数据
} else if (mode == "节能模式") {
updateSmartHomeStatus(userid, "智能灯", "开启", "50");
updateSmartHomeStatus(userid, "空调", "开启", "26");
updateSmartHomeStatus(userid, "加湿器", "开启", "40");
updateSmartHomeStatus(userid, "窗帘", "开启", "30");
emit modeChanged(); // 发送信号,通知Lights界面更新数据
}
}
在userswidget.h中添加信号声明:
signals:
void modeChanged();
在lights.h中添加槽函数声明:
private slots:
void updateStatus(); // 更新状态的槽函数
在lights.cpp中实现槽函数和连接信号槽:
Lights::Lights(int userid,QWidget *parent) :
QWidget(parent),
ui(new Ui::Lights),
userid(userid)//保证userid无变化
{
ui->setupUi(this);
lightsWidget();
//连接开关组件的信号和自定义的槽函数
connect(ui->SwitchStatus,&SwitchForm::statusChanged,this,&Lights::switchButton_status);
// 连接完成按钮的clicked信号和自定义的槽函数
connect(ui->Finished, &QPushButton::clicked, this,[=]{
if(ui->SwitchStatus->checked())
{
QString brighteness = QString::number(ui->ctrlform->getValue());
qDebug()<<brighteness<<userid;
updateSmartHomeStatus(userid,QString("智能灯"),QString("开启"),brighteness);
}else
{
qDebug()<<"智能灯未打开!";
updateSmartHomeStatus(userid,QString("智能灯"),QString("关闭"),QString("0"));
}
});
// 加载上次更改的状态
loadLastStatus();
// 连接UsersWidget的modeChanged信号和Lights的updateStatus槽函数
connect(parentWidget(), &UsersWidget::modeChanged, this, &Lights::updateStatus);
}
void Lights::updateStatus()
{
// 加载最新的状态
loadLastStatus();
}
这样,在用户界面选择模式时,会发送modeChanged信号,Lights界面会接收到该信号并调用updateStatus槽函数来更新状态。
原文地址: https://www.cveoy.top/t/topic/izCQ 著作权归作者所有。请勿转载和采集!