GEC6818——QT开发之两个UI界面切换与表格显示DHT11数据

GEC6818——QT开发之两个UI界面切换与表格显示DHT11数据

使用环境:

ubantu16
QT5.7
开发板GEC6818
实现要求:
利用A53按键1、按键2与温湿度传感器完成QT界面动态显示温湿度记录,并指定温湿度记录超过指定范围,进行报警(LED,BEEP),按下key1时,允许进行采集;当key2按下,关闭数据采集。
添加:
1.通过按键3,4可以手动打开关闭蜂鸣器与LED。
2.除开第一个界面的实时数据显示以外还有第二界面可进行切换,第二界面显示最近20条,采集的数据。
效果演示视频:基于GEC6818的QT开发之——通过按键控制DHT11模块的数据采集与动态显示

文章目录

  • GEC6818——QT开发之两个UI界面切换与表格显示DHT11数据
    • 一、两个界面的切换
      • 1.1 创建两个UI
      • 1.2 两个UI界面的布局
      • 1.3 界面跳转代码
    • 二、第二个界面以表格形式显示数据
      • 2.1 添加TableWidget的控件
      • 2.2 设计表格
        • 2.2.1 设置表格的行数与列数
        • 2.2.2 设置表头
        • 2.2.3 创建临时数组存储采集数据

一、两个界面的切换

1.1 创建两个UI

首先需要创建两个ui,如下图,【右击】–>【添加新文件】
在这里插入图片描述

然后创建QT设计师界面类
在这里插入图片描述

这里选择第二个UI的类型:
在这里插入图片描述

可以根据自己的需要进行选择。
在这里插入图片描述

最后就是新建UI绑定的类名的重命名。
然后点击下一步就可以创建成功。

在这里插入图片描述

1.2 两个UI界面的布局

要在两个UI界面进行跳转,那么我们就需要设置一个进行跳转的触发条件。可以是设计一个按钮进行点击跳转,那么创建的UI界面就是:

dht11_key.ui

在这里插入图片描述

form.ui
在这里插入图片描述

1.3 界面跳转代码

过按钮的槽函数进行dht11_key.ui的界面跳转到form.ui界面的跳转。

首先需要在第一个界面中创建第二个界面这个对象

在这里插入图片描述

Form *window=NULL;// the sec window

然后我们创建一个按钮的槽:可以是创建一个单击跳转的槽函数。
在这里插入图片描述

void DHT11_KEY::on_window2Button_clicked()
{
    this->hide();//隐藏第一个界面(这里并不是销毁)
    window->show();//显示第二个界面
}

经过上面的步骤,我们已经能从界面1转到界面2。当然如果我们想从界面2转到界面1,用这个方法依然可以,但是我们还可以用信号与槽的方式让这个方式更简便

在界面2的头文件里面添加一个返回信号。

在这里插入图片描述

让界面2的按钮在点击时发送这个信号。
所以在界面2的按钮槽函数实现
在这里插入图片描述

void Form::on_pushButton_clicked()
{
    emit goback();
}

这样当我们在界面2时,只要点击按钮,就会发送一个返回的信号,这个时候,只要我们的界面1能接收到这个信号,那我们便能实现从界面2转到界面1的行为.
在这里插入图片描述


 this->window = new Form;
    connect(window,&Form::goback,this,[=](){window->close();this->show();});

当然上面的槽函数也可以单独分离出来,实际情况根据需要进行修改即可。

二、第二个界面以表格形式显示数据

2.1 添加TableWidget的控件

首先我们需要在第二个界面添加一个TableWidget的控件,
关于这个控件的相关类,大家可以参考常见界面设计组件————QTableWidget的使用

在这里插入图片描述

2.2 设计表格

2.2.1 设置表格的行数与列数
// 设置表格的行数和列数
    ui->tableWidget->setRowCount(20); // 设置为20 行
    ui->tableWidget->setColumnCount(2);
2.2.2 设置表头

 // 设置表头
    QStringList headers;
    headers << "Temperature" << "Humidity"; // 表头标签
    ui->tableWidget->setHorizontalHeaderLabels(headers); // 设置水平表头
  1. QStringList headers;:首先,创建了一个名为headers的QStringList对象。QStringList是Qt框架中用于存储字符串列表的类。

  2. headers << "Temperature" << "Humidity";:使用QStringList的<<运算符向列表中添加了两个字符串,分别是"Temperature"和"Humidity"。这些字符串将作为表格的水平表头标签。

  3. ui->tableWidget->setHorizontalHeaderLabels(headers);:通过调用setHorizontalHeaderLabels方法,将headers中的字符串列表设置为表格的水平表头标签。这会使表格的第一列标题为"Temperature",第二列标题为"Humidity"。
    另外,你还可以根据需要自定义表头的样式,包括字体、颜色、对齐方式等。这些都可以通过Qt的相关方法来实现。

2.2.3 创建临时数组存储采集数据

因为需要显示最近20条采集的温湿度数据,所以我们新建一个临时数组进行存储,当然可以大于20条,只要在前面将表格的行数与列数进行更改就可以扩大缩小需要显示的范围。


static int data[20][2]={0};//存储最近20条数据的数组
    data[i][0]=get_data[0];//DHT11采集到的数据,这里可以更换为自己的需要展示的数组
    data[i][1]=get_data[1];
// 依次更新每一行的数据
    for (int j = 0; j <=i; ++j)
    {
        //dht11_get_data();

        // 创建表格项
        QTableWidgetItem *item1 = new QTableWidgetItem(QString::number(data[j][0])); // 第一列数据
        QTableWidgetItem *item2 = new QTableWidgetItem(QString::number(data[j][1])); // 第二列数据

        // 将表格项添加到表格中
        ui->tableWidget->setItem(j, 0, item1);
        ui->tableWidget->setItem(j, 1, item2);

        // 每次更新完一行后,将表格滚动到最后一行
        ui->tableWidget->scrollToBottom();
    }
    if(i>20)//为了进行循环,所以到达表格上限时需要清零,这样的清零不会将以前的数据全部删除,而是进行覆盖。
    {
        i=0;
    }
    else
    {
        i++;//没有超过范围就++;

    }

本文中涉及的工程代码在我的github中可以进行下载04-DHT11_twoUI(第四次提交)

效果演示视频:基于GEC6818的QT开发之——通过按键控制DHT11模块的数据采集与动态显示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

21-分支和循环语句_while语句(中)(初阶)

21-2 代码准备 getchar()&#xff1a;获取字符 int ch getchar(); //把获取的字符的ASCII码值放在ch中 int main() {int ch getchar();printf("%c\n", ch); //ch存的是该字符的ASCII码值&#xff0c;此处以字符形式打印ASCII码值对应的字符putchar(ch); } 运…

MATLAB的多项式相加

多项式的加减在阶次相同的情况下可直接运算&#xff0c;若两个相加减的多项式阶次不同&#xff0c;则低阶多项式必须用零填补高阶项系数&#xff0c;使其与高阶多项式有相同的阶次。而且通常情况下&#xff0c;进行加减的两个多项 式的阶次不会相同&#xff0c;这时可以自定义一…

JVM从1%到99%【精选】-【初步认识】

目录 1.java虚拟机 2.JVM的位置 3.代码的执行流程 4.JVM的架构模型 5.JVM的生命周期 6.JVM的整体结构 1.java虚拟机 Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。JVM平台的各种语言可以共享Java…

数据同步操作需要注意哪些点?

前言 有时候基于业务&#xff0c;我们会做一些数据清洗&#xff0c;或者老项目数据同步新项目的相关操作。在做这些业务的时候&#xff0c;往往需要注意一些必要的关键点&#xff0c;否则会造成数据的错乱&#xff0c;我们知道数据一单错乱是很难处理的。 参考文章 原作者&a…

unittest--封装excel操作

封装excel操作 操作流程类和对象初始化对象操作获取表格的数据初始化一个用于操作Excel文件的对象获取表头和所有测试用例数据数据拼接 (dict)主函数调用 操作流程 1、初始化表格对象&#xff1a; 文件路径workbook&#xff0c;表单名称sheet_name 2、初始化sheet对象 &#xf…

RIPGeo参文31—36(关于对比学习):鼓励对同一数据点进行各种增强(视图),以学习更健壮的表示

RIPGeo中有: —干扰参数。在内部最大化中,我们提出了步骤,以增加损失的方向更新。我们的方法不是用简单的一步方案最大化内部部分,而是在每次迭代结束时将扰动投影到球面空间上(第2-7行),这允许模型产生更微妙但有价值的扰动[31]。 [31] A. Kurakin, I. J. Goodfellow…

ChatGPT丨“智领科研新纪元:AI大模型,您的第二大脑!“

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的应用 以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数…

【蓝桥杯嵌入式】四、各种外设驱动(七)定时器的输出比较功能

温馨提示&#xff1a;本文不会重复之前提到的内容&#xff0c;如需查看&#xff0c;请参考附录 【蓝桥杯嵌入式】附录 重点提炼&#xff1a; 根据手册内容&#xff0c;输出比较模式&#xff08;output Compare CHx&#xff09;的功能主要需要由以下参数决定&#xff1a; 通…

Ubuntu Flask 运行 gunicorn+Nginx 部署

linux Ubuntu 下运行python 程序出现killed 原因&#xff1a;CPU或内存限制&#xff1a;在华为云上&#xff0c;你可能有CPU或内存使用的限制。例如&#xff0c;如果你使用的是一个固定大小的实例&#xff0c;那么超过该实例的CPU或内存限制可能会导致进程被杀死。 参考&am…

react中hooks使用限制

只能在最顶层使用Hook 不要在循环、条件中调用hook&#xff0c;确保总是在React函数最顶层使用它们 只能React函数中调用Hook 不要在普通的js函数中调用 在React的函数组件中调用Hook 在自定义hook中调用其他hook 原因&#xff1a; 我们每次的状态值或者依赖项存在哪里&…

matplotlib-散点图

日期&#xff1a;2024.03.14 内容&#xff1a;将matplotlib的常用方法做一个记录&#xff0c;方便后续查找。 # 引入需要使用的库 from matplotlib import pyplot as plt# 设置画布大小 plt.figure(figsize(20,8),dpi 300)# 全局设置中文字体 plt.rcParams[font.sans-serif]…

JAVA学习9

目录 一.继承 1.继承的原理&#xff1a; 2.继承的细节&#xff1a; 3.继承的本质&#xff1a; 二.super的使用&#xff1a; 1.基本介绍&#xff1a; 2.注意事项与使用细节&#xff1a;&#xff08;1&#xff09;访问父类的属性super.属性名&#xff0c;但不能访问父类的p…

洛谷P1941题解

题目背景 NOIP2014 提高组 D1T3 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度&#xff0c;让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话&#xff0c;便宣告失败。 为了…

蓝桥杯2023年省A(一波三折的)【买瓜】折半搜索+剪枝+排序

题目&#xff1a;洛谷 P9234 [蓝桥杯 2023 省 A] 买瓜 折半搜索 一开始觉得像dp&#xff0c;试着写了&#xff0c;显然过不了&#xff0c;但我实在觉得搜索也过不了啊&#xff0c;去看题解&#xff0c;发现使用了折半搜索&#xff08;每天都觉得啥都不会捏 折半搜索就是先搜一…

CentOS部署 JavaWeb 实现 MySql业务

一、项目打war包 在eclispe或idea中找到项目&#xff0c;右键打war包。 二、上传项目到linux 2.1云服务器虚拟机均可 以tomcat为例 /usr/local/tomcat/webapps 将war包通过ssh连接上传到webapps目录下。 如果是root目录则不需要项目名即 ip或域名端口直接访问&#xff08…

数学建模-估计出租车的总数

文章目录 1、随机抽取的号码在总体的排序 1、随机抽取的号码在总体的排序 10个号码从小到大重新排列 [ x 0 , x ] [x_0, x] [x0​,x] 区间内全部整数值 ~ 总体 x 1 , x 2 , … , x 10 总体的一个样本 x_1, x_2, … , x_{10} ~ 总体的一个样本 x1​,x2​,…,x10​ 总体的一个样…

Linux磁盘配额

磁盘配额 概述 Linux系统作为一个多用户的操作系统&#xff0c;在生产环境中&#xff0c;会发生多个用户共同使用一个磁盘的情况&#xff0c;会造成Linux根分区的磁盘空间耗尽&#xff0c;导致Linux系统无法建立新的文件&#xff0c;从而出现服务程序崩溃、系统无法启动等故障…

Elasticsearch:调整搜索速度

在我之前的文章 “Elasticsearch&#xff1a;如何提高查询性能” 及 “Elasticsearch&#xff1a;提升 Elasticsearch 性能” 里&#xff0c;我详细描述了如何提高搜索的性能。在今天的文章里&#xff0c;我从另外一个视角来描述如何调整搜索的速度。希望对大家有所帮助&#x…

c++简单实现avl树

文章目录 AVL树节点类节点类的构造函数 AVLinsert()插入RotateL(左单旋)RotateR(右单旋)RotateLR(右双旋)RotateRL(左双旋) Find(查找)IsBalance(检查是否是avl树) AVL树 AVL树:又名高度平衡树&#xff0c;在二叉搜索树的基础上加上了一个条件&#xff0c;条件是左右子树高度差…

【并查集】模版

【模板】并查集 - 洛谷 #include <bits/stdc.h> using namespace std; const int N2e59; int a[N]; int Find(int x) {if(xa[x]){return x;}else{a[x]Find(a[x]);return a[x];} } void push(int x,int y) {a[Find(x)]Find(y);return ; } int main() {int n,m; cin>>…
最新文章