代码修改只显示修改部分:用户点击Lights界面从数据库的Status表中得到最新的智能灯device_state和value更新在Lights页面当用户未对SwitchForm进行操作但对ctrlform更改时由于SwitchForm的状态是靠点击触发的如果ui上显示开启状态true时flag默认为FALSE存入Status的device_state为关闭false出现错误如何解决#ifndef
以下是修改部分的代码:
Lights.h:
#ifndef LIGHTS_H
#define LIGHTS_H
#include <QWidget>
namespace Ui {
class Lights;
}
class Lights : public QWidget
{
Q_OBJECT
public:
explicit Lights(int userid, QWidget *parent = nullptr);
~Lights();
void lightsWidget();
bool flag = false;
void showEvent(QShowEvent *event); // 重写界面
void hideEvent(QHideEvent *event); // 隐藏界面
void loadLastStatus(); // 加载上次更改的状态
void saveLastStatus(); // 保存当前更改的状态
public slots:
bool switchButton_status(bool checked);
private:
Ui::Lights *ui;
int userid;
void closeEvent(QCloseEvent *event);
QString getLastBrightness(int userid);
QString getLastState(int userid);
void updateLastBrightness(int userid, QString state, QString brightness);
void updateSmartHomeStatus(int userid, QString deviceName, QString state, QString brightness);
};
#endif // LIGHTS_H
Lights.cpp:
#include "lights.h"
#include "ui_lights.h"
#include "switchform.h"
#include "sqlite.h"
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QSqlError>
#include <QCloseEvent>
#include <QDebug>
Lights::Lights(int userid, QWidget *parent) :
QWidget(parent),
ui(new Ui::Lights),
userid(userid)
{
ui->setupUi(this);
lightsWidget();
connect(ui->SwitchStatus, &SwitchForm::statusChanged, this, &Lights::switchButton_status);
connect(ui->ctrlform, &CtrlForm::valueChanged, this, [=](int value) {
if (flag) {
qDebug() << value << userid;
updateSmartHomeStatus(userid, QString("智能灯"), QString("开启"), QString::number(value));
}
else {
qDebug() << "智能灯未打开!";
updateSmartHomeStatus(userid, QString("智能灯"), QString("关闭"), QString("0"));
}
});
loadLastStatus();
}
Lights::~Lights()
{
delete ui;
}
void Lights::lightsWidget()
{
setWindowTitle("智能灯设置");
setAutoFillBackground(true);
QPalette palette = this->palette();
QPixmap pixmap(":/user/image/image/light.jpg");
palette.setBrush(QPalette::Window, QBrush(pixmap));
setPalette(palette);
setFixedSize(600, 400);
}
bool Lights::switchButton_status(bool checked)
{
qDebug() << checked;
flag = checked;
return flag;
}
void Lights::showEvent(QShowEvent *event)
{
loadLastStatus();
event->accept();
}
void Lights::hideEvent(QHideEvent *event)
{
saveLastStatus();
event->accept();
}
void Lights::closeEvent(QCloseEvent *event)
{
hide();
event->ignore();
}
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();
}
void Lights::saveLastStatus()
{
qDebug() << this->userid;
QString state = QString(flag);
QString brightness = QString::number(ui->ctrlform->getValue());
updateLastBrightness(this->userid, state, brightness);
}
QString Lights::getLastBrightness(int userid)
{
Sqlite::sqlite_init();
QString queryStr = QString("SELECT value FROM Status WHERE uid = %1 AND device_name = '智
原文地址: https://www.cveoy.top/t/topic/izbo 著作权归作者所有。请勿转载和采集!