一 环境范围设置

(1)界面添加新控件

在mainwindow.ui 添加控件:

控件的类型

文本内容

对象名(唯一)

是否有槽函数

QLabel

<温度<

lable_随意

QLabel

<湿度<

lable_随意

QLabel

<光照度<

lable_随意

QPushButton

更新范围

PushButton_range

是 clicked()

控件的类型

当前值

最大值

最小值

对象名(唯一)

是否有槽函数

QSpinBox

0

99

-20

spinBox_temMIN

QSpinBox

50

100

-19

spinBox_temMAX

QSpinBox

0

99

0

spinBox_humMIN

QSpinBox

50

100

1

spinBox_humMAX

QSpinBox

0

3999

0

spinBox_illMIN

QSpinBox

1000

4000

1

spinBox_illMAX

QT智能家居代码 qt 智能家居_串口

QT智能家居代码 qt 智能家居_ui_02

QT智能家居代码 qt 智能家居_qt_03

QT智能家居代码 qt 智能家居_串口_04

QT智能家居代码 qt 智能家居_QT智能家居代码_05

QT智能家居代码 qt 智能家居_串口_06

QT智能家居代码 qt 智能家居_QT智能家居代码_07

(2)实现”更新范围”槽函数

QT智能家居代码 qt 智能家居_qt_08

在mainwindow.h 添加:

#include "daosingleton.h"  // range-1  单例模式类的头文件
//在public下面添加
    void setProgressBarRange(RangeEntity &e);//设置进度条的范围

在mainwindow.cpp 添加槽函数 :

//更新范围按钮 槽函数
void MainWindow::on_pushButton_range_clicked()
{
    //(a) 从界面上获得新的范围range
    RangeEntity range;
    range.temMAX = ui->spinBox_temMAX->value();
    range.temMIN = ui->spinBox_temMIN->value();
    range.humMAX = ui->spinBox_humMAX->value();
    range.humMIN = ui->spinBox_humMIN->value();
    range.illMAX = ui->spinBox_illMAX->value();
    range.illMIN = ui->spinBox_illMIN->value();
    //range-3  修改当前房间的环境范围  -- 数据库
    bool ok = DaoSingleton::getInstance()->getDaoUser()->updateRange(homeNo, range);
    if(ok){
        ui->textBrowser->append("更新环境范围成功");
        setProgressBarRange(range); //设置进度的最大值+最小值
    }else
        ui->textBrowser->append("更新环境范围失败");
}
//设置进度的范围(最大值+最小值)
void MainWindow::setProgressBarRange(RangeEntity &e)
{
    if(ui->progressBar_tem->value() >= e.temMIN
            && ui->progressBar_tem->value() <= e.temMAX){
        ui->progressBar_tem->setMinimum(e.temMIN);
        ui->progressBar_tem->setMaximum(e.temMAX);
    }else{
        ui->textBrowser->append("温度进度条设置失败,原因:当前数据超出设置范围");
    }
    if(ui->progressBar_hum->value() >= e.humMIN
            && ui->progressBar_hum->value() <= e.humMAX){
        ui->progressBar_hum->setMinimum(e.humMIN);
        ui->progressBar_hum->setMaximum(e.humMAX);
    }else{
        ui->textBrowser->append("湿度进度条设置失败,原因:当前数据超出设置范围");
    }
    if(ui->progressBar_ill->value() >= e.illMIN
            && ui->progressBar_ill->value() <= e.illMAX){
        ui->progressBar_ill->setMinimum(e.illMIN);
        ui->progressBar_ill->setMaximum(e.illMAX);
    }else{
        ui->textBrowser->append("光照强度进度条设置失败,原因:当前数据超出设置范围");
    }
}

(3)修改房间编号槽函数

在mainwindow.cpp 添加:

//房间号 修改/切换房间 对应的槽函数                             arg1修改后的值
void MainWindow::on_comboBox_homeno_currentTextChanged(const QString &arg1)
{
    homeNo = arg1.toInt();  //新的房间号
    ui->textBrowser->setText("您已进入新的房间:");
    //range-2  查看新房间的环境的范围  -- 数据库
    RangeEntity range; // 存储查找到的范围
    bool ok = DaoSingleton::getInstance()->getDaoUser()->selectRange(homeNo, range);
    if(ok)
    {    // 将查找到的范围显示到界面上
        ui->spinBox_temMAX->setValue(range.temMAX);
        ui->spinBox_temMIN->setValue(range.temMIN);
        ui->spinBox_humMAX->setValue(range.humMAX);
        ui->spinBox_humMIN->setValue(range.humMIN);
        ui->spinBox_illMAX->setValue(range.illMAX);
        ui->spinBox_illMIN->setValue(range.illMIN);
        setProgressBarRange(range); //设置进度的最大值+最小值
    }
}

二 优化

(1)代码优化

 在mainwindow.cpp中对代码进行优化1--5:

//在构造函数中添加
  on_comboBox_homeno_currentTextChanged("1");  //优化-1 默认 调用一次切换到1号房间
  on_pushButton_update_clicked();              //优化-1 默认 刷新一次串口

QT智能家居代码 qt 智能家居_智能家居_09

//在on_comboBox_homeno_currentTextChanged()函数中添加
    ui->textBrowser->setText("您已进入新的房间:"); // 优化-2 使用说明
    ui->textBrowser->append("使用说明:1. 将zigbee连接到电脑串口,并上电,等待与Cortex-M0板连通(现象:小灯3个亮变为1个亮);");
    ui->textBrowser->append("使用说明:2. 点击'刷新串口'-选择zigbee的串口-点击'打开串口'; ");
    ui->textBrowser->append("使用说明:3. 串口打开成功后, 自动启动定时器,每隔2s采集一次环境数据; ");
    ui->textBrowser->append("使用说明:4. 串口打开成功后, 点击左边的控制按钮,远程控制Cortex-M0上的设备; ");
    ui->textBrowser->append("使用说明:5. 在界面的下方,可以修改此房间的环境范围; ");
    ui->textBrowser->append("使用说明:6. 点击 房间号 后面的控件, 切换到其他房间。");

 

QT智能家居代码 qt 智能家居_QT智能家居代码_10

//在saveHomeEnv()函数中添加
       // 优化-3  新的房间上线 ,将新的房间号插入到comboBox_homeno控件中
        int index = ui->comboBox_homeno->findText( QString("%1").arg(e.homeno) );
        if(index < 0) // 新的房间号
        {
            ui->comboBox_homeno->addItem( QString("%1").arg(e.homeno) ); //插入到控件中
        }

 

QT智能家居代码 qt 智能家居_智能家居_11

//在on_pushButton_update_clicked()函数中添加
    ui->pushButton_open->setEnabled(false); // 优化-4  不能点击

    ui->pushButton_open->setEnabled(true); // 优化-4  能点击

 

QT智能家居代码 qt 智能家居_ui_12

//在timerEvent()函数中添加
    else   //优化-5
    {
        ui->textBrowser->append("zigbee接收:失败,原因:请用户检查zigbee是否与Cortex-M0连通,或者等一会;");
    }

QT智能家居代码 qt 智能家居_qt_13

(2)界面布局和背景图片

第一个界面Login : 布局居中

QT智能家居代码 qt 智能家居_QT智能家居代码_14

第一个界面Login : 背景图片

QT智能家居代码 qt 智能家居_串口_15

 

QT智能家居代码 qt 智能家居_串口_16

QT智能家居代码 qt 智能家居_智能家居_17

第二个界面MainWindow : 背景图片

QT智能家居代码 qt 智能家居_智能家居_18

QT智能家居代码 qt 智能家居_QT智能家居代码_19

第二个界面MainWindow : 窗口大小固定

QT智能家居代码 qt 智能家居_qt_20

三 运行测试

(1)注册功能测试

QT智能家居代码 qt 智能家居_qt_21

(2)登录功能测试

QT智能家居代码 qt 智能家居_串口_22

QT智能家居代码 qt 智能家居_串口_23

(3)串口功能测试——接收环境信息

QT智能家居代码 qt 智能家居_ui_24

QT智能家居代码 qt 智能家居_qt_25

(4)串口功能测试——发送控制命令

QT智能家居代码 qt 智能家居_qt_26

QT智能家居代码 qt 智能家居_ui_27

(5)更新环境范围测试

QT智能家居代码 qt 智能家居_智能家居_28

(6)切换房间

QT智能家居代码 qt 智能家居_ui_29

QT智能家居代码 qt 智能家居_智能家居_30

(7)关闭串口

QT智能家居代码 qt 智能家居_串口_31