Qt智能家居系统:多模式控制和数据同步

本文介绍如何使用Qt实现一个简单的智能家居系统,包括以下功能:

  • 用户可以选择不同的模式,如睡眠模式、日常模式、节能模式。- 点击'Lights'界面,数据会根据当前选择的模式同步更新。

代码实现

1. UsersWidget类cpp#include 'userswidget.h'#include 'ui_userswidget.h'#include 'lights.h'#include 'sqlite.h'#include

UsersWidget::UsersWidget(int userid, QWidget *parent) : QWidget(parent), ui(new Ui::UsersWidget), userid(userid) // 保证userid无变化{ ui->setupUi(this); displayUsersWidget();

// 连接模式选择框的currentIndexChanged信号和槽函数    connect(ui->modeComboBox, QOverload<const QString&>::of(&QComboBox::currentIndexChanged), this, &UsersWidget::on_modeComboBox_currentIndexChanged);

// 点击Lights按钮时,创建并显示Lights窗口    connect(ui->lightsButton, &QPushButton::clicked, this, [=]() {        Lights *w = new Lights(userid);        w->show();    });}

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

2. Lights类cpp#include 'lights.h'#include 'ui_lights.h'#include 'sqlite.h'#include #include #include

Lights::Lights(int userid, QWidget *parent) : QWidget(parent), ui(new Ui::Lights), userid(userid) // 保证userid无变化{ ui->setupUi(this); lightsWidget();

// 连接开关组件的statusChanged信号和槽函数    connect(ui->switchButton, &SwitchButton::statusChanged, this, &Lights::switchButton_status);

// 连接完成按钮的clicked信号和槽函数    connect(ui->finishedButton, &QPushButton::clicked, this, [=]() {        if (ui->switchButton->isChecked()) {            QString brightness = QString::number(ui->brightnessSlider->value());            updateSmartHomeStatus(userid, '智能灯', '开启', brightness);        } else {            updateSmartHomeStatus(userid, '智能灯', '关闭', '0');        }    });

// 加载上次更改的状态    loadLastStatus();}

void Lights::loadLastStatus(){ QString state = getLastState(userid); QString brightness = getLastBrightness(userid);

// 根据上次的状态和亮度设置界面上的组件状态    if (state == '开启') {        ui->switchButton->setChecked(true);        ui->brightnessSlider->setValue(brightness.toInt());    } else {        ui->switchButton->setChecked(false);        ui->brightnessSlider->setValue(0);    }}

QString Lights::getLastBrightness(int userid){ QSqlQuery query; query.prepare('SELECT value FROM Status WHERE uid = :userid AND device_name = '智能灯' ORDER BY sid DESC LIMIT 1'); query.bindValue(':userid', userid); if (!query.exec()) { qDebug() << '获取上次亮度失败:' << query.lastError().text(); return ''; } if (query.next()) { return query.value(0).toString(); } else { return ''; }}

QString Lights::getLastState(int userid){ QSqlQuery query; query.prepare('SELECT device_state FROM Status WHERE uid = :userid AND device_name = '智能灯' ORDER BY sid DESC LIMIT 1'); query.bindValue(':userid', userid); if (!query.exec()) { qDebug() << '获取上次状态失败:' << query.lastError().text(); return ''; } if (query.next()) { return query.value(0).toString(); } else { return ''; }}

void Lights::updateSmartHomeStatus(int userid, const QString &deviceName, const QString &devicestate, const QString &newValue){ QSqlQuery query; query.prepare('INSERT INTO Status (uid, device_name, device_state, value) VALUES (:userid, :deviceName, :devicestate, :newValue)'); query.bindValue(':userid', userid); query.bindValue(':deviceName', deviceName); query.bindValue(':devicestate', devicestate); query.bindValue(':newValue', newValue); if (!query.exec()) { qDebug() << '更新智能家居状态失败:' << query.lastError().text(); }}

代码说明

  1. UsersWidget类中,当用户选择不同的模式时,会调用updateSmartHomeStatus()函数更新数据库中对应设备的状态和值。

  2. Lights类中,当用户打开Lights界面时,会调用loadLastStatus()函数从数据库中读取上次保存的设备状态和值,并更新界面上的组件状态。

  3. 当用户点击'完成'按钮时,会将当前的设备状态和值保存到数据库中。

总结

本文介绍了如何使用Qt实现一个简单的智能家居系统,包括用户选择模式后,点击Lights界面,数据同步更新的功能。希望本文能帮助您了解如何使用Qt进行简单的智能家居系统开发。

Qt智能家居系统:多模式控制和数据同步

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

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