在UsersWidget类中,添加一个槽函数来处理QComboBox的选择变化事件。在该槽函数中,根据用户选择的模式,更新Status表中对应设备的数据。

首先,在UsersWidget类的头文件中添加一个私有成员变量,用于存储当前用户的ID:

private:
    int userId;

然后,在UsersWidget类的构造函数中,将传入的用户ID保存到成员变量中:

UsersWidget::UsersWidget(int userid,QWidget *parent) :
    QWidget(parent),
    ui(new Ui::UsersWidget),
    userId(userid)
{
    //...
}

接下来,在UsersWidget类中添加一个槽函数来处理QComboBox的选择变化事件:

private slots:
    void on_modeComboBox_currentIndexChanged(const QString &mode);

然后在构造函数中连接QComboBox的currentIndexChanged信号到该槽函数:

connect(ui->modeComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(on_modeComboBox_currentIndexChanged(const QString&)));

在槽函数中,根据用户选择的模式,更新Status表中对应设备的数据:

void UsersWidget::on_modeComboBox_currentIndexChanged(const QString &mode)
{
    if (mode == "睡眠模式") {
        updateSmartHomeStatus(userId, "空调", "温度", "27");
        updateSmartHomeStatus(userId, "加湿器", "湿度", "50");
        updateSmartHomeStatus(userId, "窗帘", "开度", "100");
    } else if (mode == "日常模式") {
        updateSmartHomeStatus(userId, "空调", "温度", "25");
        updateSmartHomeStatus(userId, "加湿器", "湿度", "60");
        updateSmartHomeStatus(userId, "窗帘", "开度", "0.5");
    } else if (mode == "节能模式") {
        updateSmartHomeStatus(userId, "空调", "温度", "26");
        updateSmartHomeStatus(userId, "加湿器", "湿度", "40");
        updateSmartHomeStatus(userId, "窗帘", "开度", "0.3");
    }
}

最后,根据更新SmartHomeStatus函数的定义,将其移动到UsersWidget类的实现文件中,并修改函数名为UsersWidget::updateSmartHomeStatus。

完整代码如下:

#include "userswidget.h"
#include "ui_userswidget.h"
#include "lights.h"
#include "aircondition.h"
#include "curtains.h"
#include "humidiffer.h"
#include "information.h"
#include "procession.h"
#include "QCloseEvent"
#include "QMessageBox"

UsersWidget::UsersWidget(int userid,QWidget *parent) :
    QWidget(parent),
    ui(new Ui::UsersWidget),
    userId(userid)
{
    ui->setupUi(this);
    displayUsersWidget();
    connect(ui->lights,&QToolButton::clicked,this,[=]{
        Lights *w = new Lights(userid);
        w->show();});
    connect(ui->air_condition,&QToolButton::clicked,this,[=]{
        AirCondition *w = new AirCondition(userid);
        w->show();});
    connect(ui->curtains,&QToolButton::clicked,this,[=]{
        Curtains *w = new Curtains(userid);
        w->show();});
    connect(ui->humidifiers,&QToolButton::clicked,this,[=]{
        Humidiffer *w = new Humidiffer(userid);
        w->show();});
    connect(ui->tables,&QToolButton::clicked,this,[=]{
        Information *w = new Information;
        w->show();});
    connect(ui->wifi,&QToolButton::clicked,this,[=]{
        Procession *w = new Procession;
        w->show();});

    connect(ui->modeComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(on_modeComboBox_currentIndexChanged(const QString&)));
}

UsersWidget::~UsersWidget()
{
    delete ui;
}

void UsersWidget::displayUsersWidget()
{
    setWindowTitle("智能家居总览图");
    setFixedSize(900,600);

}

void UsersWidget::closeEvent(QCloseEvent *e)
{
    if(e->spontaneous())
    {
    //窗口关闭时弹出的提示窗口
        QMessageBox::StandardButton reply;

        reply = QMessageBox::information(this,"提示","确认退出智能管家系统?",QMessageBox::Yes|QMessageBox::No);
        if(reply == QMessageBox::Yes){
            //若用户点击确认,则接收这个事件,当前窗口会关闭
            e->accept();
         }else{
            //若用户点击取消,则忽略这个事件,当前窗口不会关闭
            e->ignore();
        }
    }
}

void UsersWidget::on_modeComboBox_currentIndexChanged(const QString &mode)
{
    if (mode == "睡眠模式") {
        updateSmartHomeStatus(userId, "空调", "温度", "27");
        updateSmartHomeStatus(userId, "加湿器", "湿度", "50");
        updateSmartHomeStatus(userId, "窗帘", "开度", "100");
    } else if (mode == "日常模式") {
        updateSmartHomeStatus(userId, "空调", "温度", "25");
        updateSmartHomeStatus(userId, "加湿器", "湿度", "60");
        updateSmartHomeStatus(userId, "窗帘", "开度", "0.5");
    } else if (mode == "节能模式") {
        updateSmartHomeStatus(userId, "空调", "温度", "26");
        updateSmartHomeStatus(userId, "加湿器", "湿度", "40");
        updateSmartHomeStatus(userId, "窗帘", "开度", "0.3");
    }
}

// 更新智能家居状态表中的数据
void UsersWidget::updateSmartHomeStatus(int userId, QString deviceName, QString devicestate,QString newValue)
{
    Sqlite::sqlite_init();
    // 执行更新操作
    QSqlQuery query;
    query.prepare("SELECT * FROM Status WHERE uid = :userId");
     query.bindValue(":userId", userId);
     if (!query.exec()) {
         qDebug() << "查询id失败:" << query.lastError().text();
     }
         QString sql = QString("INSERT INTO Status (uid, device_name, device_state, value) VALUES (%1, '%2', '%3', '%4')")
                 .arg(userId).arg(deviceName).arg(devicestate).arg(newValue);
         query.prepare(sql);
         if (!query.exec()) {
             qDebug() << "插入数据失败:" << query.lastError().text();
             return;
     }
}

请注意,上述代码中的updateSmartHomeStatus函数仅是一个示例实现,具体的更新操作可能需要根据你的数据库结构和需求进行修改。另外,还需要确保在使用该函数之前已经正确初始化了数据库连接

代码续写:要求用户在UserWidget界面点击QComboBox可以选择睡眠模式日常模式节能模式睡眠模式:空调温度27加湿器湿度50窗帘100;日常模式:空调温度25加湿器湿度60窗帘05;节能模式:空调温度26加湿器湿度40窗帘03用户选择模式后SQlite的Status表内数据改变#include userswidgeth#include ui_userswidgeth#include li

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

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