Qt想要实现在主界面进入Lights界面设置智能灯状态信息点击关闭按钮该界面隐藏再次点击Lights界面显示上一次的智能灯状态信息。代码修改只显示修改部分#include lightsh#include ui_lightsh#include switchformh#include sqliteh#include QSqlQuery#include QSqlDatabase#include QSql
这段代码的功能是实现在主界面进入Lights界面,设置智能灯的状态信息,并且可以保存上一次的状态信息。具体修改的部分如下:
- 在
Lights类的构造函数中,添加了一个userid参数,并且在初始化列表中进行了赋值,保证userid不会发生变化。
Lights::Lights(int userid, QWidget *parent) :
QWidget(parent),
ui(new Ui::Lights),
userid(userid)
{
// ...
}
- 在
Lights类的loadLastStatus函数中,修改了获取上一次状态和亮度的SQL查询语句,使用了新的函数getLastState和getLastBrightness。
void Lights::loadLastStatus()
{
QString state = getLastState(this->userid);
QString brightness = getLastBrightness(this->userid);
// ...
}
- 添加了一个新的函数
getLastBrightness,用于从数据库中获取上一次的亮度信息。
QString Lights::getLastBrightness(int userid)
{
Sqlite::sqlite_init();
QString queryStr = QString("SELECT value FROM Status WHERE uid = %1 AND device_name = '智能灯'").arg(userid);
QSqlQuery query;
if (query.exec(queryStr) && query.next())
{
return query.value(0).toString();
}
else
{
qDebug() << "得到上一次亮度错误: " << query.lastError().text();
return "";
}
}
- 添加了一个新的函数
getLastState,用于从数据库中获取上一次的状态信息。
QString Lights::getLastState(int userid)
{
Sqlite::sqlite_init();
QString queryStr = QString("SELECT device_state FROM Status WHERE uid = %1 AND device_name = '智能灯'").arg(userid);
QSqlQuery query;
if (query.exec(queryStr) && query.next())
{
return query.value(0).toString();
}
else
{
qDebug() << "得到上一次状态错误: " << query.lastError().text();
return "";
}
}
- 添加了一个新的函数
updateLastBrightness,用于更新上一次的亮度和状态信息。
void Lights::updateLastBrightness(int userid, QString brightness, QString state)
{
Sqlite::sqlite_init();
QString queryStr = QString("UPDATE Status SET value = '%1' AND device_state = '%2' WHERE uid = %3 AND device_name = '智能灯'").arg(brightness).arg(state).arg(userid);
QSqlQuery query;
if (!query.exec(queryStr))
{
qDebug() << "更新亮度失败: " << query.lastError().text();
}
}
以上是对代码的修改部分,实现了在主界面进入Lights界面,设置智能灯状态信息,点击关闭按钮,该界面隐藏,再次点击Lights界面,显示上一次的智能灯状态信息。
原文地址: https://www.cveoy.top/t/topic/iy5L 著作权归作者所有。请勿转载和采集!