嵌入式项目实战——基于QT的视频监控系统设计(一)

2023-05-16

嵌入式项目实战——基于QT的视频监控系统设计(一)

这个五一因为疫情,只能待在家里,想了想不如将我之前做的一个小的嵌入式的练习项目分享出来,供入门嵌入式的同学们学习。基于QT的视频监控系统设计虽然是个小项目,但是涉及的嵌入式的知识点还是比较多的,比如多线程编程,网络编程,QT界面设计,LCD显示,如果有时间我也会介绍一下触摸屏的使用,v4l2视频解码以及嵌入式开发板的基本操作。下面就开始我们五一假期的学习吧!!

第一天:QT的基本使用和UDP网络编程

一、QT的基本使用——完成一个简易的随机选餐软件设计

Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt并不是一门编程语言。Qt是一门用标准C++编写的跨平台开发类库,它对标准C++进行了拓展,引入了元对象系统,信号与槽,属性等特性,使应用程序的开发变得更加高效。控件就是Qt提供的一种图形类,在设计编程时,可以直接拖入设计界面(mainwindow.ui)进行编程。QT最关键的使用就是信号与槽的使用,槽即是一个函数,将要实现的功能、运算在槽函数里面定义清楚,之后通过图形界面上的按钮信号触发槽函数,前提是要先将按钮信号与槽函数绑定在一起。理解了这个就掌握了QT编程的基础,再熟悉一点QT的基本语法之后,就能开发一个QT软件啦。

下面就跟着我开始你的第一个QT界面软件设计吧!!

首先安装你的QT Creator软件,下载地址我也贴在这里,省的你们去找了(https://download.qt.io/archive/qt/5.9/5.9.1/)。下载之后跟着一步步安装即可,我就不一步一步的安装贴在上面了,毕竟我们的重点是使用撒。提示:安装组件一定要选择MinGW 5.3.0,如果你打算开发Android软件的话,还需要勾选Android ARMv7。

image-20220430163320792

安装完成之后,打开桌面的图标即可进入软件界面。

image-20220430164039895

之后进入下一步,命名你的项目名称,选择你要保存的路径,然后点击下一步。

image-20220430164450105

接下来你要选择你的编译工具,它决定了你是创建一个桌面软件还是Android软件,这里我还没有配置Android开发环境,所以只有一个选项,如果你想开发一个Android软件,需要提前配置环境,可以留言,我会出一期这方面的教程。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2PPcYzMS-1651327201162)(https://cdn.jsdelivr.net/gh/zhangmeng19960901/blog-img/image-20220430164841314.png)]

之后一直点击下一步,直到完成创建项目。出现下面这些就表明项目已经创建成功。你就可以在这个项目框架上大展拳脚啦。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yuvREPc-1651327201163)(https://cdn.jsdelivr.net/gh/zhangmeng19960901/blog-img/image-20220430165014690.png)]

我们今天要设计的是一款随机选餐软件,我选择这个奇怪的题目的原因是我对象每天吃饭的时候都发愁纠结不知道吃哪一个,她就说让我给她做一个选餐软件,免得她纠结,今天正好介绍QT,把这个软件做一下。这是一个功能很简单的软件哦。跟着做下去你一定能够实现的。

首先设计我们的界面。双击Froms->mainwindow.ui。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3tTw9SZZ-1651327201164)(https://cdn.jsdelivr.net/gh/zhangmeng19960901/blog-img/image-20220430165821066.png)]

进入界面设计,我们首先点击画布空白区域,在右下角找到window Title,给软件命名。

image-20220430170149189

下面开始你的界面设计,我设计的这个界面只有两个按键,两个显示条,成品就是下面这个展示的这个,你可以根据你的偏好设计属于你的界面。按键:Push Button,显示条:Line Edit。效果就是点击按键《点击这里开始选餐》,显示条就会随机显示一个餐品名,如果不满意,点击按键《最后一次选择机会》,会重新在显示条随机显示一个餐品名。

image-20220430192020653

下面就开始最关键的内容了,开始设计代码,关联信号与槽函数了,QT有两种关联方式。一种是直接鼠标左键点击按键,选择转到槽,再选择信号类型,点击OK,就会自动生成槽函数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NE8vmsF-1651327201168)(https://cdn.jsdelivr.net/gh/zhangmeng19960901/blog-img/image-20220430192722294.png)]

在mainwindow.cpp中就会自动生成一个槽函数

void Mainwindow::on_pushButton_clicked(){

}

在mainwindow.h头文件中也会自动声明一个槽函数

private slots:
    void on_pushButton_clicked();

image-20220430192910997

还有一种关联按键信号和槽函数的方式,这种方式适合一次将多个信号关联到一个槽函数

QPushButton *push_num_button[] = {
        ui->pushButton_1,
        ui->pushButton_2,};	//定义一组按键的数组
connect(push_num_button[i], SIGNAL(clicked(bool)), this, SLOT(槽函数));//将信号与槽函数绑定在一起。本句中的意思是将按键pushButton1与槽函数关联,通过clicked即点击触发

本软件因为是两个按键,我就一个用系统自动生成,一个用connect函数来关联。用connect()函数来关联按键《最后一次选择机会》的代码如下。

image-20220430202852708

在mainwindow.h中同样需要声明一个参函数。

private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();

现在我们需要在槽函数里面实现我们的功能了。我们需要实现什么功能呢,很简单,就是当我们点击《点击这里开始选餐》按键(这里对应的信号与槽函数是pushButton,on_pushButton_clicked())时,会在显示条line_Edit_2上显示随机出现的餐名,点击《最后一次选择机会》按键(这里对应的信号与槽函数时pushButton_2,on_pushButton_2_clicked())时,会在显示条line_Edit_2上重新显示一个随机的餐名。现在功能已经明确了,那我们就开始动手实现吧!

要想实现随机选餐功能,我们就需要生成一个随机数

#include <ctime>//头文件
qsrand(time(NULL));
int n = qrand() % 5;//生成一个5以内的随机数

之后就变得很简单啦,我们先定义一些字符串,然后比较生成的随机数是什么,选择相应的字符串显示在显示条中就可以啦!!

QString s1 = "五谷渔粉";
QString s2 = "凉面凉皮";
QString s3 = "关东煮";
QString s4 = "恰一碗素汤粉";
QString s5 = "辣椒鸡丝刀削面";

这里我用的是最简单的方式实现的,直接定义多个QString,也可以用字符串列表来实现,代码更简洁一些。这个就留给你们自己去探索吧。

然后我们在对应的槽函数里来处理按键按下之后的逻辑就可以了

void MainWindow::on_pushButton_clicked()
{
    qsrand(time(NULL));
    int n = qrand() % 5;//生成一个5以内的随机数
    QString tmp;
    if(n == 0){
        tmp = s1;
    }
    else if(n == 1){
        tmp = s2;
    }
    else if(n == 2){
        tmp = s3;
    }
    else if(n == 3){
        tmp = s4;
    }
    else if(n == 4){
        tmp = s5;
    }
    ui->lineEdit_2->setText(tmp);//将字符串tmp显示在line_Edit_2显示条上
}

点击左下角的编译按钮就可以生成软件啦

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQAHmRTq-1651327201173)(https://cdn.jsdelivr.net/gh/zhangmeng19960901/blog-img/image-20220430204658750.png)]

到这里这个随机选餐的软件就完成啦,是不是很容易上手啊,下面是成品展示效果。

ezgif.com-gif-maker

本来今天打算把网络编程的内容也一并讲了的,写这个博客花费了太多时间,明天在补上吧。

完整代码我会贴在公众号中,需要完整代码的关注公众号回复随机选餐软件获取。也什么问题也可以在下方留言,我看到之后会回复你。

我是河边小乌龟爬,学习嵌入式软件开发路上的一名小学生,欢迎大家相互交流哇。公众号:河边小乌龟爬。

(群名称:嵌入式软件开发交流群;群 号:1004953094)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式项目实战——基于QT的视频监控系统设计(一) 的相关文章

  • Allegro快捷键(env)位置和快捷键设置

    前景 在画PCB板 xff0c 保证质量同时 xff0c 也要讲究效率 xff0c 要是一只手用鼠标来点选命令画板 xff0c 效率会大大折扣 xff0c 所以出现PCBlayout快捷键 xff0c 本文章将的是allegro快捷键 al
  • Altium Designer使用者,你想要一键出Gerber吗?

    前言 在我们辛辛苦苦画完一个PCB板 xff0c 细心谨慎地生成Gerber xff0c 突然 xff0c 发现一个丝印没摆好 xff0c 只能改丝印再重新生成Gerber xff0c 又突然 xff0c 发现有根线离电源太近了 xff0c
  • allegro同比例放大缩小LOGO丝印

    前言 在遇到元件密集情况下 xff0c 既要兼顾元件位号丝印 xff0c 又能凸显公司的LOGO时 xff0c 常常碰到LOGO丝印太大 xff0c 放不下 xff0c 要是再缩小一点 xff0c 就能放下了 所以我就写了这篇文章 xff0
  • 利用Sigrity的SPEED2000进行时域电源噪声分析

    前序 相信大家在网上可以找到本文章的类似教程 xff0c 我就是这样 xff0c 找到了教程 xff0c 兴致冲冲地按教程每个步骤操作 xff0c 但最后因为素材不一样 xff0c 得不到想要的结果 xff0c 有时出来的波形是一条水平线
  • 利用Sigrity PowerDC进行单板直流仿真--静态功率传输体系分析

    前序 本文章利用Sigrity PowerDC进行单板直流仿真 静态功率传输体系分析的教程写出来 xff0c 同时 xff0c 将Sigrity PowerDC 单板直流仿真分析素材上传 xff0c 供大家使用 xff0c 不用苦苦寻找仿真
  • org.htmlparser小结

    org htmlparser 主要用来解析HTML网页 一 基本上HTML中的每个标签对应于一个类 xff0c 例如 xff1a p标签对应于ParagraphTag类 ul标签对应于BulletList类 li标签对应于Bullet类 a
  • STM32中使用printf打印串口数据

    STM32使用printf打印串口 摘要 该方法适用于 STM32 xff0c 实现了使用 printf 等标准 C 流函数输出数据的办法 xff0c 极大的减少了输出串口数据时所需要做的数据处理 实现原理 在 C 库中 xff0c pri
  • 尺取法(图文解析、初学推荐)

    文章目录 最少连续页 xff08 poj3320 xff09 分析题意第一步 xff1a 找第一个满足条件区间第二步 xff1a 开始将左端边界向右移 xff0c 达到 缩小 区间 减少连续页的目的 归纳总结代码 尺取法 xff1a 顾名思
  • 第九届蓝桥杯——倍数问题(数论、枚举)

    倍数问题 众所周知 xff0c 小葱同学擅长计算 xff0c 尤其擅长计算一个数是否是另外一个数的倍数 但小葱 只擅长两个数的情况 xff0c 当有很多个数之后就会比较苦恼 现在小葱给了你 n 个数 xff0c 希望你 从这 n 个数中找到
  • 基于Python OpenCV的车牌识别(一)————车牌定位

    一开始本想基于OpenCV原理编写定位程序的 xff0c 但发现效果并不是特别理想 xff0c 只能识别我处理的那张图片的车牌 xff0c 在使用其他图片识别的时候失误非常多 xff0c 几乎识别不到车牌 xff0c 下面附上识别的代码和效
  • 计算机网络——尝试SMTP交互(邮件发送)

    前言 本文通过 Windows 命令提示符 xff08 cmd xff09 实现邮件发送 第一步 xff1a 打开 Windows Telnet Client 功能 打开控制面板 点击程序 点击启动或关闭 Windows 功能 将 Teln
  • 离散数学:推理规则

    推理规则解释说明前提引入规则可以在证明的任何时候引入前提结论引入规则在证明的任何时候 xff0c 已证明的结论都可以作为后续证明的前提置换规则在证明的任何时候 xff0c 命题公式中的任何子命题公式都可以用与之等价的命题公式置换假言推理规则
  • 离散数学:谓词逻辑命题符号化

    个体词 个体常项或个体常元 xff1a 使用 x y z 表示个体变项或个体变元 xff1a 使用 a b c 表示个体域或论域 xff1a 个体变元的取值全总个体域 xff1a 宇宙件一切事物 谓词 概念 xff1a 表示个体性质或彼此之
  • 离散数学:主范式(主析取范式、主合取范式)

    求解主析取范式 主合取范式方法 1 真值表法 在表中列出变元值的全部可能 查表判断命题 命题结果真 xff0c 变元值对应主析取范式 命题结果假 xff0c 变元值对应主合取范式 2 等值演算法 命题化简 蕴涵等值式 xff1a A B A
  • Camera:双摄基本原理

    基本概念 基线 xff1a 两镜头的间距 景深 xff1a 画面清晰范围 xff0c 景深小 浅 背景虚化 xff0c 景深大背景清晰 影响景深的三个因素 xff1a 光圈 xff08 反比 xff0c 光圈越大景深越小 xff09 焦距
  • Linux:Hello World 模块

    前言 Linux 系统为应用程序提供了功能强大且容易扩展的 API xff0c 但在某些情况下 xff0c 这还远远不够 与硬件交互或进行需要访问系统中特权信息的操作时 xff0c 就需要一个内核模块 下面从 Hello World 模块来
  • 基础算法题 —— 计算字符串的编辑距离(动态规划)

    题解 在题目所求的编辑距离是指字符串 a 转换成字符串 b 所需最小的操作步骤 a i 61 b j 时 xff0c 要使 a i 61 61 b j 可使用的操作步骤如下 xff1a a i 可替换成 b j 字符串 a 下标为 i 的位
  • Matlab —— 02 基本操作与矩阵输入

    一 基本操作 1 help 功能 xff1a 便于快速了解指令的使用 ex 查询 pi 的简明介绍 Question 通过 matlab 计算出下列算式结果 Answer 1 2 或 xff08 3 xff09 xff08 4 xff09
  • Matlab —— 03结构化程式与自定义函数

    Script writing 新建脚本编辑界面 编辑测试文档 运行节 将整个框架划分为多个小节运行 xff0c 便于进行 Debug 设置断点 检查变量数值 方法一 xff1a 工作区内检查 方法二 xff1a 鼠标滑到变量位置 Struc
  • [unity] NavMesh 寻路 贴边走的问题 优化。

    NavMesh 寻路出来后 xff0c 角色走路很多时候贴着地图的边缘走 xff0c 很别扭 网上找了一个类似的问题 xff1a http www manew com thread 94163 1 1 html 里面方案 也挺适合我们的情况

随机推荐

  • 网易云ncm文件转mp3

    本人卖了一个ipod nano6 xff0c 帮买家导些歌 xff0c 结果用网易云下下来一堆ncm文件 xff0c 一脸懵逼 xff0c 因为ipod只能放mp3文件 上网查了一下ncm文件 xff0c 只能在会员有效期内放这个歌 于是上
  • catkin_make编译时fatal error: ###_msgs/***.h: 没有那个文件或目录

    h是头文件 xff0c 头文件 xff0c 就是一些定义和声明 xff0c 注意是定义 xff08 算是API接口吧 xff09 xff0c 编译时先加载这些头文件 xff0c 加载好了后主程序才能调用这些定义 那出现这种错误就是编译该程序
  • Theta* : 基于网格的任意角度寻路

    原文地址 xff08 科学上网 xff09 xff1a https arxiv org ftp arxiv papers 1401 1401 3843 pdf 1 简介 在本文中 xff0c 我们将研究一种机器人技术或视频游戏中使用的路径规
  • deepsort之YOLO系列目标跟踪及其他功能

    文章目录 一 ID switch是什么 xff1f 二 deepsort框架二 deepsort需要的模型1 目标检测器2 目标跟踪器 一 ID switch是什么 xff1f 跟踪问题中最重要的就是数据关联 xff08 data asso
  • PX4软件在环仿真注意点

    注 xff1a 最新内容参考PX4 user guide 点击此处 PX4下载指定版本代码和刷固件的三种方式 点击此处 PX4sitl固件编译方法 点击此处 PX4开发指南 点击此处 PX4无人机仿真 Gazebo 点击此处 px4仿真 知
  • cmake:生成动态链接库并使用

    已知 库函数的源文件名字叫hello c xff0c 库函数的头文件名字叫hello h xff0c 生成的动态链接库函数的名称叫libhello so xff0c 目标是在 hello install文件夹下安装这个库 xff0c 以便后
  • 算法:皇后问题

    问题 国际象棋中的皇后 xff0c 可以横向 纵向 斜向移动 如何在一个NXN的棋盘上放置N个皇后 xff0c 使得任意两个皇后都不在同一条横线 竖线 斜线方向上 xff1f 举个栗子 xff0c 下图的绿色格子是一个皇后在棋盘上的 封锁范
  • OpenCV+Python二维码条形码识别

    先上源码 xff0c github地址 xff1a https github com DerrickRose25 Opencv QRcode recognition 环境 xff1a Pycharm Python3 7 在pycharm里安
  • Onvif协议:实现Probe命令来进行设备发现(discover)

    在onvif协议对接中 xff0c 首先要明确服务器和客户端的身份 服务器 xff1a 通常是你要对接的其他厂家的数字摄像头 xff08 IPC xff09 客户端 xff1a 通常是对接的ipc的设备程序 xff0c 安防业内多称 xff
  • Linux C/C++编程:Udp组播(多播)

    Udp多播简介 概叙 单播用于两个主机之间单对单的通信广播用于一个主机对整个局域网上所有主机上的数据通信单播和广播是两个极端 xff0c 要么对一个主机进行通信 xff0c 要么对整个局域网的主机进行通信实际情况下 xff0c 经常需要对一
  • cmake:同一目录下多个源文件

    此文为 xff1a 轻松入门cmake系列教程前文为 xff1a cmake xff1a Hello cmake 接下来进入稍微复杂的例子 xff1a 在同一个目录下有多个源文件 第一个实验 实践 在之前的目录下添加2个文件 xff0c t
  • cmake:string

    字符串操作 概要 Search span class token operator and span Replace span class token function string span span class token punctu
  • 性能:你知道并发用户数应该怎么算吗

    我们知道 xff0c 一个性能测试中 xff0c 往往会有各种各样的指标 xff0c 比如TPS RPS QPS HPS CPM等 我们在实际工作的时候 xff0c 应该对这些概念有统一的认识 建议使用TPS作为关键的性能指标 另外 xff
  • C/C++面试:手写智能指针类

    shared ptr原理 shared ptr实际上是对裸指针进行了一层封装 xff0c 成员变量除了裸指针之外 xff0c 还有一个引用计数 xff0c 它记录裸指针被引用的次数 xff08 有多少个shared ptr指向这同一个裸指针
  • golang:http.request

    request 表示由服务器接收或由客户端发送的HTTP请求 xff0c 例如客户端 client 在发送各种请求时 xff0c 需要先新建一个请求对象 xff0c 然后调用一些请求的方法开始自定义一些配置 xff0c 服务端监听到该请求便
  • git:smartgit

    下载安装smartgit 下载 xff1a https www syntevo com smartgit download 终端下操作 xff1a 执行命令 xff1a tar xvf smartgit tar gz 执行命令 xff1a
  • golang:如何在proto3中用上golang对应的interface{}类型

    首先 xff0c 我希望所有golang中用于http请求响应的结构 xff0c 都使用proto3来定义 麻烦的是 xff0c 有的情况下某个字段的类型可能是动态的 xff0c 对应的JSON类型可能是number string bool
  • 如何计算icmp校验和

    前几天看到大佬写的一篇关于icmp远控后门文章 xff0c 对icmp协议充满了激情 xff0c 通过查阅资料了解相关所需的知识 xff0c 实现整个程序首先要了解imcp包请求与回复 xff0c 在整个请求中最先就涉及到icmp包的构造
  • 作为一个自动化本科生到底应该学些什么(讲讲个人经历和感受)

    2019 6 26日深夜 晚上在床上准备休息 xff0c 一个同跟我聊天说自己大学荒废了 xff0c 突然有很多感想想写一写 我觉得自己大学也是得过且过地过着的 xff0c 不过虽然充满艰辛和不满意 xff0c 但还是挺充实的 先自我介绍一
  • 嵌入式项目实战——基于QT的视频监控系统设计(一)

    嵌入式项目实战 基于QT的视频监控系统设计 xff08 一 xff09 这个五一因为疫情 xff0c 只能待在家里 xff0c 想了想不如将我之前做的一个小的嵌入式的练习项目分享出来 xff0c 供入门嵌入式的同学们学习 基于QT的视频监控