嵌入式Qt-表格使用测试
本篇介绍Qt中表格组件的使用,需要用到QTableWidget。
通过一个实例来介绍QTableWidget,下图是表格使用的测试效果。
1 QTableWidgetQTableWidget是Qt中的表格组件类,相关使用函数可以参考Qt Creator中自带的帮助文档。
2 代码编写2.1 图形界面设置从左侧的ItemWidgets中,拖出一个Table Widget放到界面中,然后设置合适的大小。
另外,为了方便测试数据的插入,可以添加一个按钮来每次插入一条数据,例如插入一条书籍的信息。
Table Widget放入后,可以在ui界面双击这个控件来继续编辑表格的行和列等信息,也可以通过代码的方式来设置表格的信息,本篇通过代码编写的方式,再对Table Widget进行相关信息的初始化。
2.2 表格初始化与数据插入表格初始化放到界面类(如Widget)的构造函数中,用于初始化表格的表头,字体大小,行宽度等。
通过按下按钮触发一条数据插入。
123456789101112131415161718192021//表格初始化ui->tableWidget->setColu ...
Linux网络编程-TCP客户端如何获取要连接的服务端IP?
1 问题引出在进行socket通信开发时,一般会用到TCP或UDP这两种传输层协议,UDP(User Datagram Protocol)是一种面向无连接的协议,在数据发送前,不需要提前建立连接,它可以更高效地传输数据,但可靠性无法保证。TCP(Transmission Control Protocol)是一种面向连接的协议,一个应用程序开始向另一个应用程序发送数据之前,必须先进行握手连接,以保证数据的可靠传输。所以,对于数据可靠性要求较高的场合,一般使用TCP协议通信。
在使用TCP方式的socket编程,客户端需要知道服务端的IP和端口号,然后向服务端申请连接,对于端口号,可以事先固定一个特定的端口号,但对于IP地址,在实际的开发使用中,比如嵌入式开发中,两个连网的硬件需要进行TCP通信,在建立通信,客户端硬件是不知道服务端硬件IP的(除了程序开发阶段,事先知道IP,将IP写死到程序中),因为通常情况下IP是由路由器分配的,不是一个固定值,这种情况,客户端如何自动获取服务端的IP来建立TCP通信呢?
2 解决方案本篇就来实现一种解决方法:在建立TCP通信前,可以先通过UDP通信 ...
嵌入式Qt-FFmpeg设计一个RTSP播放器
上篇文章,介绍了FFmpeg的交叉编译,以及在嵌入式Linux平台,运行ffmpeg指令来播放视频。
本篇,将通过Qt程序,设计一个RTSP视频播放器,来播放网络视频,并增加启动、暂停等操作按钮。
1 FFMPEG 库介绍
1.1 ffmpeg的7个库ffmpeg有7个library,分别是:
avutil
swscale
swresample
avcodec
avformat
avdevice
avfilter
avutil 工具库avutil是一个实用的工具库用于辅助可移植的多媒体编程。它包含安全的可移植的字符串函数,随机数生成器,数据结构,附加的数学函数,密码学和多媒体相关功能(例如像素和样本格式的枚举)。它不是 libavcodec 和 libavformat 都需要的代码库。
swscale 视频像素数据格式转换swscale库执行高度优化的图像缩放以及色彩空间和像素格式转换操作,这个库执行以下转换:
Recailing:是改变视频大小的过程。 有几个重新缩放选项和算法可用。 这通常是一个有损过程。
Pixel format conversion:是将图像的图像格式和 ...
嵌入式Qt-交叉编译FFmpeg与视频播放测试
想要在Linux板子上通过Qt界面来播放视频,一种可选的方式是调用FFmpeg库来实现视频的解码与播放。本篇先来进行FFmpeg库的交叉编译,将FFmpeg库移植到Linux板子上。
1 交叉编译FFmpegFFmpeg需要用到x264库,需要先编译这个库。
1.1 编译x264官网http://www.videolan.org/developers/x264.html下载x264的源码
然后解压,并进行配置
12345#解压tar -xvf x264-master.tar.bz2#进入源码目录, 进行配置./configure --enable-shared --enable-static --host=arm-linux-gnueabihf --cross-prefix=arm-linux-gnueabihf- --disable-opencl --enable-pic --disable-asm --prefix=$PWD/_install
一些参数说明:
–host=arm-linux-gnueabihf :指定交叉编译链
–enable-shared :允许共享
...
嵌入式Qt-简易网络监控摄像头
本编利用Qt实现一个网络摄像头功能,包含一个服务端和一个客户端,服务端用于将USB摄像头转换为一个IP摄像头,当有客户端连接时,将其捕获到的图像通过TCP发送出去;客户端运行在Linux板子上,用于查看摄像头的实时画面。
1 必备基础知识本篇需要编写一个服务器和客户端,关于TCP服务器/客户端的基础知识,可参考这篇:Linux进程间通信详解(七) socket套接字基础
注意,Qt中对Socket的操作进行了进一步的封装,其基本思想还是一样的。
下面就来看一下Qt中如何实现TCP Socket通信。
1.1 QTcpSocket与QTcpServer
QTcpSocket,在Qt中,Socket被封装成了QTcpSocket,可以用它实现TCP客户端的功能,以及服务端接收到客户端后,对客户端的处理。
QTcpServer,对于TCP服务端的功能,可以使用QTcpServer来完成。
这里整理Qt中TCP Socket的使用方法,配合Qt的信号与槽机制,即可实现服务端/客户端数据的收发处理。
1.2 QCamera相关
QCamer,获取当前系统可用的摄像头 类似获取串口
QC ...
嵌入式Qt-控制硬件-滑动条控制RGB灯
前面的几篇文章,介绍Qt例程,都是和硬件无关的,Windows平台和嵌入式平台都能运行。
本篇,来测试一下Qt界面控制嵌入式平台上的硬件,以野火i.MX6ULL板子上的RGB LED为例,实现Qt界面控制3种颜色LED的不同亮度混合显示。
1 设计Qt滑条控制LED界面先来看一下最终设计的界面效果:
有一个按键作为LED的总开关,控制LED的点亮与熄灭。下面的3个滑条,控制3种颜色LED以不同的亮度点亮。右边是一个颜色混合显示面板,模拟RGB三种颜色的LED以不同亮度点亮后的混合亮度。
1.1 滑条控件Qt Creator的UI设置界面中,有水平滑条和竖直滑条控件,可以直接使用:
右侧的属性窗户可以设置滑条的取值范围和初始值。
1.2 控件颜色使用QPalette可以对界面颜色和控件的颜色进行自定义设置
QPalete::Window——通常指窗口部件的背景色
QPalette::WindowText——通常指窗口不见的前景色
QPalette::Base——底色
QPalette::Button——指按钮窗口部件的背景色
QPalette::ButtonText——指按钮窗口部 ...
嵌入式Qt-实现两个窗口的切换
之前的文章,分别有介绍过使用Qt程序实现一个时钟和一个秒表,本篇,来将这两个功能整合在一起,实现两个页面的随意切换,并且两个页面能独立运行,互不影响。
先来看下最终的效果,通过左侧的两个按钮,实现两个页面的切换。
1 Qt堆栈窗口本篇的页面切换功能,是利用Qt的QStackedWidget实现的。
1.1QStackedWidgetQStackedWidget 类提供了多页面切换的布局,一次只能显示一个界面。
1.2 基础模板对于QStackedWidget的使用,可以先参考下面这个模板,配合QLabel来控制页面的切换:
1234567891011121314151617181920212223242526272829303132#include "stackdlg.h"#include <QHBoxLayout>StackDlg::StackDlg(QWidget *parent) : QDialog(parent){ setWindowTitle(tr("StackedWidget")); list ...
嵌入式Qt-做一个秒表
之前的文章:嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序
介绍了如何编写第一个嵌入式Qt程序,实现了一个电子时钟的演示。
本篇,继续进行Qt实践,仿照手机中的秒表,实现一个相同功能的秒表:
回顾上一次的Qt开发流程,整个Qt的开发都是通过敲代码实现的,实际上,还可以利用Qt Creater的UI界面功能,通过图像化的配置来开发图形界面,本篇就使用这种方法来进行开发。
1 新建Qt工程Qt工程创建的具体步骤可参照之前的文章:嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序,这里只说明不同之处。
上篇是通过代码实现页面设计的,本篇要借助Qt Creater的UI界面设计功能,因此要把下面的创建页面勾选上:
创建完成之后的Qt默认工程结构如下:
双击widget.ui,即可打开UI设置页面,如下图:
这里先简单熟悉下各个功能区:
2 代码编写2.1 ui界面设计修改界面的尺寸,我的Linux板子屏幕的分辨率是800x480,因此调整到对应的尺寸:
从左侧拖入一个Label,然后可以修改字体的大小:
再从左侧拖入其它需要用到的组件(PushButton、TextB ...
嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序
上篇文章:嵌入式Linux-Qt环境搭建
介绍了如何搭建在Linux开发板中搭建Qt的运行环境,并测试了Qt自带的例程。
本篇,来介绍如何自己编写一个Qt程序,并将编译结果放到Linux开发板中运行。
1 Windows上编写Qt程序因为Qt是支持跨平台的,所以我们可以先在Windows平台上编写和查看Qt的运行效果,然后再通过交叉编译,编译出ARM Linux平台的可执行文件,最终放到开发板中查看运行结果。
Windows上需要安装Qt Creator软件来开发Qt程序,该软件的安装过程,和大多数软件的安装过程都差不多,在此不再演示安装过程。
下面介绍如何创建一个Qt工程。
1.1 新建Qt工程Qt Creator本质也是一个集成开发环境,与Visual Studio之类的创建工程的流程类似,其软件界面如下:
创建工程,选择左上角菜单中的“文件”->”新建文件或项目”,弹出如下窗口,然后默认选择Qt Widgets Application,然后右下加点击“Choose”按键:
出现选择项目工程的存放位置,然后再下一步:
这里会用到Visual Studio中的一些功能,默 ...
STM32状态机编程实例--全自动洗衣机(下)
上篇文章,通过状态机编程,实现了全自动洗衣机的逻辑控制,并通过串口打印的方式显示各个状态。
本篇,为了更加直观的感受状态机的运行,使用0.96寸OLED来显示各个状态,并搭配对应的动态图标来体现洗衣机工作的各个状态。
先来看下演示效果:
1 OLED图片显示为了能方便的在OLED上显示文字和图片,可以借助一些图形库来帮我们显示,这里使用的是U8g2图形库。
1.1 U8g2库移植U8g2库在STM32上的移植,之前的文章已经介绍过,具体的移植过程可以参考这篇:
移植成功后,可以使用测试例程验证U8g2库的显示效果。
1.2 图片显示图片相比较文字,可以展示更加丰富的内容,因此本篇通过简单的单色图片来展示洗衣机的工作状态。
U8g2库显示图片,可以使用u8g2_DrawXBM函数,需要先将图片转为数组。
可以使用这个在线网页来进行图片数据的转换:https://tools.clz.me/image-to-bitmap-array
这里可以使用自己喜欢的图片,进行展示,比如我选取了不同水量的洗衣机图标来显示洗衣机的当前水量,使用多张图片的交替显示产生洗衣机在清洗的动画效果。
2 ...