"#include "userswidget.h"\n#include "ui_userswidget.h"\n#include "sqlite.h"\n#include "lights.h"\n#include "aircondition.h"\n#include "curtains.h"\n#include "humidiffer.h"\n#include "information.h"\n#include "procession.h"\n#include "QCloseEvent"\n#include "QComboBox"\n#include "QMessageBox"\n\nUsersWidget::UsersWidget(int userid,QWidget *parent) :\n QWidget(parent),\n ui(new Ui::UsersWidget)\n{\n ui->setupUi(this);\n displayUsersWidget();\n connect(ui->lights,&QToolButton::clicked,this,[=]{\n Lights *w = new Lights(userid);\n w->show();});\n connect(ui->air_condition,&QToolButton::clicked,this,[=]{\n AirCondition *w = new AirCondition(userid);\n w->show();});\n connect(ui->curtains,&QToolButton::clicked,this,[=]{\n Curtains *w = new Curtains(userid);\n w->show();});\n connect(ui->humidifiers,&QToolButton::clicked,this,[=]{\n Humidiffer *w = new Humidiffer(userid);\n w->show();});\n connect(ui->tables,&QToolButton::clicked,this,[=]{\n Information *w = new Information;\n w->show();});\n connect(ui->wifi,&QToolButton::clicked,this,[=]{\n Procession *w = new Procession;\n w->show();});\n connect(ui->mode, QOverload::of(&QComboBox::currentIndexChanged),\n this, &UsersWidget::on_modeComboBox_currentIndexChanged);\n\n\n\n}\n\nUsersWidget::~UsersWidget()\n{\n delete ui;\n}\n\nvoid UsersWidget::displayUsersWidget()\n{\n setWindowTitle("智能家居总览图");\n setFixedSize(900,600);\n\n}\n\nvoid UsersWidget::on_modeComboBox_currentIndexChanged(int mode)\n{\n switch (mode)\n {\n case 1:\n {\n updateSmartHomeStatus(userid, "智能灯", "开启", "20");\n updateSmartHomeStatus(userid, "空调", "开启", "27");\n updateSmartHomeStatus(userid, "加湿器", "开启", "50");\n updateSmartHomeStatus(userid, "窗帘", "开启", "100");\n break;\n }\n case 2:\n {\n updateSmartHomeStatus(userid, "智能灯", "开启", "20");\n updateSmartHomeStatus(userid, "空调", "开启", "27");\n updateSmartHomeStatus(userid, "加湿器", "开启", "50");\n updateSmartHomeStatus(userid, "窗帘", "开启", "100");\n break;\n }\n case 3:\n {\n updateSmartHomeStatus(userid, "智能灯", "开启", "50");\n updateSmartHomeStatus(userid, "空调", "开启", "26");\n updateSmartHomeStatus(userid, "加湿器", "开启", "40");\n updateSmartHomeStatus(userid, "窗帘", "开启", "30");\n break;\n }\n default:;\n\n\n }\n\n}\n\nvoid UsersWidget::closeEvent(QCloseEvent *e)\n{\n if(e->spontaneous())\n {\n //窗口关闭时弹出的提示窗口\n QMessageBox::StandardButton reply;\n\n reply = QMessageBox::information(this,"提示","确认退出智能管家系统?",QMessageBox::Yes|QMessageBox::No);\n if(reply == QMessageBox::Yes){\n //若用户点击确认,则接收这个事件,当前窗口会关闭\n e->accept();\n }else{\n //若用户点击取消,则忽略这个事件,当前窗口不会关闭\n e->ignore();\n }\n }\n}\n\n\n\n#include \n#include \n#include \n#include \n#include \n#include "sqlite.h"\n\nSqlite::Sqlite()\n{\n\n}\n\n\nvoid Sqlite::sqlite_init()\n{\n // 先关闭重复的数据库连接\n if (QSqlDatabase::contains("qt_sql_default_connection")) {\n QSqlDatabase::removeDatabase("qt_sql_default_connection");\n }\n QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");\n db.setDatabaseName("../Smarthome_Client/database/database.db");\n if(!db.open())\n {\n qDebug() << "无法打开数据库!";\n }\n else{\n qDebug() << "数据库打开成功!";\n }\n}\n\n\n// 更新智能家居状态表中的数据\nvoid updateSmartHomeStatus(int userId, QString deviceName, QString devicestate,QString newValue)\n{\n Sqlite::sqlite_init();\n // 执行更新操作\n QSqlQuery query;\n query.prepare("SELECT * FROM Status WHERE uid = :userId");\n query.bindValue(:userId, userId);\n if (!query.exec()) {\n qDebug() << "查询id失败:" << query.lastError().text();\n }\n QString sql = QString("INSERT INTO Status (uid, device_name, device_state, value) VALUES (%1, '%2', '%3', '%4')")\n .arg(userId).arg(deviceName).arg(devicestate).arg(newValue);\n query.prepare(sql);\n if (!query.exec()) {\n qDebug() << "插入数据失败:" << query.lastError().text();\n return;\n }\n}\n\nboolean statusUid(int userId)\n{\n Sqlite::sqlite_init();\n QSqlQuery query;\n // 查询智能家居状态表,获取用户对应的状态\n query.prepare("SELECT * FROM status WHERE user_id = :userId");\n query.bindValue(:userId, userId);\n qDebug()<<query.exec();\n if (!query.next()) {\n qDebug() << "Failed to execute query!"<<query.lastError().text();\n return false;\n }else{\n qDebug() << "Successed to execute query!";\n return true;\n }\n}\n\n\n-- 创建智能家居状态表\nCREATE TABLE IF NOT EXISTS Status (\n sid INTEGER PRIMARY KEY AUTOINCREMENT,\n uid INTEGER ,\n device_name varchar(10),\n device_state varchar(10),\n value varchar(10),\n mode varchar(10),\n FOREIGN KEY (uid) REFERENCES users (uid)\n);\n\n-- 创建用户表\nCREATE TABLE IF NOT EXISTS users (\n uid INTEGER PRIMARY KEY AUTOINCREMENT,\n username varchar(10), \n passwd varchar(10)\n);\n\n\n-- 创建智能家居状态表\nCREATE TABLE IF NOT EXISTS Status (\n sid INTEGER PRIMARY KEY AUTOINCREMENT,\n uid INTEGER ,\n device_name varchar(10),\n device_state varchar(10),\n value varchar(10),\n mode varchar(10),\n FOREIGN KEY (uid) REFERENCES users (uid)\n);\n\nSELECT device_state FROM Status WHERE uid = 123 AND device_name = '智能灯';\nSELECT device_state FROM Status WHERE uid = 123 AND device_name = '智能灯' ORDER BY sid DESC LIMIT 1;\nUPDATE Status SET value = '12' , device_state = '开启' WHERE uid = 123 AND device_name = '智能灯';\n\n\n\n-- 创建智能家居状态表\nCREATE TABLE IF NOT EXISTS Status (\n sid INTEGER PRIMARY KEY AUTOINCREMENT,\n uid INTEGER ,\n device_name varchar(10),\n device_state varchar(10),\n value varchar(10),\n mode varchar(10),\n FOREIGN KEY (uid) REFERENCES users (uid)\n);\n\nSELECT device_state FROM Status WHERE uid = 123 AND device_name = '智能灯';\nSELECT device_state FROM Status WHERE uid = 123 AND device_name = '智能灯' ORDER BY sid DESC LIMIT 1;\nUPDATE Status SET value = '12' , device_state = '开启' WHERE uid = 123 AND device_name = '智能灯';\n"无法实现Lights界面显示用户选择mode的信息的原因可能有以下几点:\n\n1. 数据库中的Status表没有存储用户选择的mode信息。在代码中只更新了设备的状态和值,没有更新mode字段。\n\n2. Lights界面没有从数据库中读取最新的Status信息。在代码中没有使用SELECT语句从数据库中获取最新的Status信息,而是直接更新了数据库中的数据。\n\n3. Lights界面没有将获取到的最新Status信息显示出来。在代码中没有将从数据库中获取到的最新Status信息显示在Lights界面上。\n\n为了实现Lights界面显示用户选择mode的信息,可以进行以下修改:\n\n1. 在updateSmartHomeStatus函数中,添加更新mode字段的操作。根据用户选择的mode值,更新数据库中对应的mode字段。\n\n2. 在Lights界面的构造函数中,使用SELECT语句从数据库中获取最新的Status信息,并将其保存到变量中。\n\n3. 在Lights界面中添加一个用于显示mode信息的控件,将获取到的最新Status的mode信息显示在该控件中。\n

智能家居系统Lights界面无法显示用户选择mode信息解决方案

原文地址: https://www.cveoy.top/t/topic/qgSc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录