以下是修改后的代码,只显示修改部分:

userswidget.h:

#ifndef USERSWIDGET_H
#define USERSWIDGET_H

#include <QWidget>

namespace Ui {
class UsersWidget;
}

class UsersWidget : public QWidget
{
    Q_OBJECT

public:
    explicit UsersWidget(int userid, QWidget *parent = nullptr);
    ~UsersWidget();
    void displayUsersWidget();

signals:
    void modeChanged(const QString &mode); // 添加信号

protected:
    void closeEvent(QCloseEvent *);

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

private:
    Ui::UsersWidget *ui;
    int userid;
};

#endif // USERSWIDGET_H

userswidget.cpp:

#include "userswidget.h"
#include "ui_userswidget.h"
#include "sqlite.h"
#include "lights.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->modeComboBox, QOverload<const QString&>::of(&QComboBox::currentIndexChanged), this, [this](const QString& mode){
        on_modeComboBox_currentIndexChanged(mode);
    });
}

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

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

void UsersWidget::on_modeComboBox_currentIndexChanged(const QString &mode)
{
    if (mode == "睡眠模式") {
        updateSmartHomeStatus(userid, "智能灯", "开启", "20");
    } else if (mode == "日常模式") {
        updateSmartHomeStatus(userid, "智能灯", "开启", "80");
    } else if (mode == "节能模式") {
        updateSmartHomeStatus(userid, "智能灯", "开启", "50");
    }
    emit modeChanged(mode); // 发送信号
}

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();
        }
    }
}

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();

signals:
    void brightnessChanged(int brightness); // 添加信号

private slots:
    bool switchButton_status(bool checked);
    void on_brightnessSlider_valueChanged(int value);

private:
    Ui::Lights *ui;
    int userid;

    void closeEvent(QCloseEvent *event);
    QString getLastBrightness(int userid);
    QString getLastState(int userid);
    void updateLastBrightness(int userid, 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->brightnessSlider, &QSlider::valueChanged, this, &Lights::on_brightnessSlider_valueChanged);
    connect(this, &Lights::brightnessChanged, ui->brightnessSlider, &QSlider::setValue);
}

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)
{
    flag = checked;
    return flag;
}

void Lights::showEvent(QShowEvent *event)
{
    loadLastStatus();
    event->accept();
}

void Lights::hideEvent(QHideEvent *event)
{
    saveLastStatus()
代码修改只显示修改部分:用户在UserWidget界面点击QComboBox选择模式SQlite的Status表内数据改变要求点击Lights界面数据同时被更新#ifndef USERSWIDGET_H#define USERSWIDGET_H#include QWidgetnamespace Ui class UsersWidget;class UsersWidget public QWidg

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

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