智能家居系统 QT

news2024/11/25 20:25:18

一 环境范围设置

(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

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

在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 默认 刷新一次串口

//在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. 点击 房间号 后面的控件, 切换到其他房间。");

 

//在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) ); //插入到控件中
        }

 

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

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

 

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

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

第一个界面Login : 布局居中

第一个界面Login : 背景图片

 

第二个界面MainWindow : 背景图片

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

三 运行测试

(1)注册功能测试

(2)登录功能测试

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

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

(5)更新环境范围测试

(6)切换房间

(7)关闭串口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTF-misc练习(https://buuoj.cn)之第一页

一、金胖子 1.打开gif&#xff0c;看到有东西闪过&#xff0c;把gif分帧保存 2.就得到flag&#xff1a; 二、二维码 1.分析压缩包&#xff1a; 2.解压图片&#xff0c;分析图片&#xff0c;还有一个隐藏文件&#xff1a; 3.分离图片&#xff1a; 4.图片需要输入密码&#xff…

android studio 加载html文件(备忘)

android studio版本&#xff1a;2021.2.1 例程名称&#xff1a;htmlFile 我做的一个小东西需要一个软件协议之类的&#xff0c;之前直接用textview做&#xff0c;修改起来太麻烦&#xff0c;所以改成加载html文件&#xff0c;即解决了txt可能被修改的问题&#xff0c;如果下次…

python 3 - Clipspy模块使用

一、clipspy安装&#xff1a; Clipspy底层是基于clips规则引擎开发、支持python3的一个模块&#xff0c;在python3的工程中&#xff0c;可以通过调用clipsy的API接口实现clips规则引擎。 在线安装&#xff1a; pip install clipspy 当出现Successfully installed字样时&…

从零开始的深度学习之旅(3)

目录神经网络的损失函数1.损失函数的引入2.损失函数3.回归&#xff1a;误差平方和SSE3.1 MSE的使用3.2 二分类交叉熵损失函数3.3 极大似然估计推导二分类交叉熵损失3.4 用tensor实现二分类交叉熵损失4.多分类交叉熵损失函数4.1 实现多分类交叉熵损失神经网络的损失函数 1.损失…

Excel - 获取帮助信息,查找Sheet中和VBA里的可用函数

Excel获取帮助信息 在使用Excel时&#xff0c;可以点击菜单的Help&#xff0c;可以获取帮助信息或Training。 点击Help帮助信息&#xff1a; 如果你觉得查看不方便&#xff0c;开可以使用浏览器&#xff0c;访问官网线上支持文档&#xff1a; Excel help & learning 而点击…

【微服务】GateWay概念与使用

一、API 网关功能&#xff1a; 路由到指定位置&#xff1a;后台管理系统经常给各个服务发送请求&#xff0c;某一个服务掉线了&#xff0c;我们不可能手动去修改端口号&#xff0c;让它去其他机器找。因此&#xff0c;需要 API 网关&#xff0c;让其帮助我们将请求路由到正确位…

【华为OD机试真题 python】竖直四子棋【2022 Q4 | 200分】

■ 题目描述 【竖直四子棋】 竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。 一方的4个棋子横、竖或者斜方向连成一线时获胜。 现给定一个棋盘和红蓝对弈双方的下子步骤,…

学会问问题

推荐文档&#xff1a;学会问问题&#xff1b; 目录 三句话原则 你就是孙子 问问题过程 第一步—学会问好 示例如下 第二步—有屁快放 问问题需要加上的前缀或者后缀&#xff1a; 示例如下 第三步—介绍自己的框架 示例如下 第四步—介绍自己的解决思路 示例如下 …

spring cache (Redis方式)

目录前置pom: jar配置文件: application.ymlMyCacheConfig.java效果图前置 会演示springcache的使用方式 项目地址: https://gitee.com/xmaxm/test-code/blob/master/chaim-cache/chaim-spring-cache/chaim-spring-cache-redis/README.md 前置配置 本篇文章是基于上篇文章进行…

Flutter 使用FFI+CustomPainter实现全平台渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频&#xff08;本章&#xff09; 文章目录Flutter视频渲染系列前言一、如何实现1、C/C实现视频采集&#xf…

3. 使用PyTorch深度学习库训练第一个卷积神经网络CNN

这篇博客将介绍如何使用PyTorch深度学习库训练第一个卷积神经网络&#xff08;CNN&#xff09;。训练CNN使用 KMNIST 数据集&#xff08;MNIST digits数据集的替代品&#xff0c;内置在PyTorch中&#xff09;识别手写平假名字符&#xff08;handwritten Hiragana characters&am…

图的二种遍历-广度优先遍历和深度优先遍历

图的广度优先遍历 1.树的广度优先遍历 这样一个图中&#xff0c;是如何实现广度优先遍历的呢&#xff0c;首先&#xff0c;从1遍历完成之后&#xff0c;在去遍历2,3,4&#xff0c;最后遍历5 &#xff0c;6 , 7 , 8。这也就是为什么叫做广度优先遍历&#xff0c;是一层一层的往…

36个数据分析方法与模型

目录一、战略与组织二、质量与生产三、营销服务四、财务管理五、人力资源六、互联网运营好的数据分析师不仅熟练地掌握了分析工具&#xff0c;还掌握了大量的数据分析方法和模型。这样得出的结论不仅具备条理性和逻辑性&#xff0c;而且还更具备结构化和体系化&#xff0c;并保…

Python连接MYSQL、SQL Server、Oracle数据入库一网打尽

描述&#xff1a; Python众所周知用来数据提取&#xff0c;通俗说用来抓数据&#xff0c;将拿到的数据进行数据清洗、加工,分析等等。而其中最重要的部分就是数据爬取、数据入库这两部分了&#xff0c;至于数据分析那就特别考察你的SQL能力&#xff0c;如果是自己设计页面&…

马齿苋多糖偶联顺铂复合物/黄连素偶联顺铂化合物/载顺铂mPEg-PGA纳米微球制备方法

小编今天整理了马齿苋多糖偶联顺铂复合物/黄连素偶联顺铂化合物/载顺铂mPEg-PGA纳米微球制备方法&#xff0c;一起来看&#xff01; 黄连素偶联顺铂化合物制备方法: 以A549/DDP细胞为研究对象,分别加入12 μg/mL的顺铂,浓度为20 μmol/L,40 μmol/L,80 μmol/L的黄连素12 μg/…

艾美捷EndoGrade卵清蛋白重组示例说明

卵清蛋白是一种优质蛋白质&#xff0c;占蛋清蛋白总量的 54%-69%&#xff0c;卵清蛋白是典型的球蛋白&#xff0c;分子量为 44.5k Da&#xff0c;属含磷糖蛋白&#xff0c;含有四个自由巯基、385 个氨基酸残基。这些氨基酸残基相互缠绕折叠形成具有高度二级结构的球型结构&…

spring cache (默认方式)

目录前置pom配置示列代码效果图部分源码关键类流程代码描述 (此类无用, 只是备注源码的逻辑)前置 什么是springcache: 通过注解就能实现缓存功能, 简化在业务中去操作缓存 Spring Cache只是提供了一层抽象, 底层可以切换不同的cache实现. 通过CacheManager接口来统一不同的缓存…

大数据培训课程MapTask工作机制

MapTask工作机制 MapTask工作机制如图4-12所示。 图4-12 MapTask工作机制 &#xff08;1&#xff09;Read阶段&#xff1a;MapTask通过用户编写的RecordReader&#xff0c;从输入InputSplit中解析出一个个key/value。 &#xff08;2&#xff09;Map阶段&#xff1a;该节点主要…

java面试强基(9)

字符串拼接用“” 还是 StringBuilder? ​ Java 语言本身并不支持运算符重载&#xff0c;“”和“”是专门为 String 类重载过的运算符&#xff0c;也是 Java 中仅有的两个重载过的运算符。 ​ 字符串对象通过“”的字符串拼接方式&#xff0c;实际上是通过 StringBuilder 调…

【MFC】一个最简单的MFC程序(9)

了解完MFC程序的流程后&#xff0c;会有 “果然不需要了解这些东西&#xff0c;直接用就可以了” 的感觉。这应该是MFC的初衷吧——按照框架来&#xff0c;集中精力做应用。但是没有了解呢&#xff1f; 最简单的MFC程序 步骤&#xff1a; 1、创建WIN32应用程序&#xff0c;空…