智能灯界面状态与数据库状态不一致的解决方法
智能灯界面状态与数据库状态不一致的解决方法
在智能灯界面,用户未操作开关,但更改了亮度时,界面显示状态与数据库状态可能不一致,例如:用户点击Lights界面,从数据库的Status表中得到最新的智能灯device_state和value,更新在Lights页面,当用户未对Switchform进行操作,但对ctrlform更改时,flag默认为FALSE,但如果ui上显示开启状态时,却存入Status的device_state为'关闭',出现错误,如何解决?
代码修改
以下代码修改可以解决上述问题:
void Lights::loadLastStatus()
{
qDebug()<<this->userid;
QString state = getLastState(this->userid);
QString brightness = getLastBrightness(this->userid);
qDebug()<<brightness;
if (state=="开启")
{
ui->SwitchStatus->setChecked(true);
ui->ctrlform->setValue(brightness.toInt());
}
else
{
ui->SwitchStatus->setChecked(false);
ui->ctrlform->setValue(0);
}
qDebug()<<brightness.toInt();
// 如果界面上显示开启状态,但存入数据库的设备状态为关闭,则更新数据库中的状态为开启
if (ui->SwitchStatus->checked() && state == "关闭") {
updateSmartHomeStatus(userid, QString("智能灯"), QString("开启"), brightness);
}
}
void Lights::saveLastStatus()
{
qDebug()<<this->userid;
QString state = QString(flag);
QString brightness = QString::number(ui->ctrlform->getValue());
updateLastBrightness(this->userid, state, brightness);
// 如果界面上显示关闭状态,但存入数据库的设备状态为开启,则更新数据库中的状态为关闭
if (!ui->SwitchStatus->checked() && state == "开启") {
updateSmartHomeStatus(userid, QString("智能灯"), QString("关闭"), QString("0"));
}
}
在loadLastStatus函数中,添加了检查界面上显示的开启状态是否与数据库中存储的设备状态一致的逻辑。如果界面上显示开启状态,但存入数据库的设备状态为关闭,则更新数据库中的状态为开启。在saveLastStatus函数中,也添加了类似的逻辑,用于检查界面上显示的关闭状态是否与数据库中存储的设备状态一致,如果不一致,则更新数据库中的状态为关闭。这样可以确保界面上显示的状态与数据库中存储的状态一致。
总结
通过以上代码修改,可以解决智能灯界面状态与数据库状态不一致的问题,确保界面显示与数据库数据同步。
原文地址: https://www.cveoy.top/t/topic/fAXY 著作权归作者所有。请勿转载和采集!