Linux上位机开发实践(关于Qt的移植)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

linux平台上面,很多界面应用,都是基于qt开发的。不管是x86平台,还是arm平台,qt使用的地方都比较多。虽然现在很多产品开始使用lvgl,不过就目前的观察来说,qt基本上还是大家默认的界面标准。今天就来讨论下,qt本身是如何port到平台之上的。

1、安装方法

目前要在Linux上面使用qt,主要就是两种方法。一种是直接apt-get下载;还有一种就是自己用源代码进行编译。如果是利用apt-get下载,一般代表系统本身已经安装好了ubuntu,或者是debian。这种情况下直接apt-get安装,无疑是最方便的。

另外一种,用编译源代码的方式安装。这种方式在那些cpu性能不是特别强的soc上面,表现得特别明显。**比如本身cpu就是a7、a9,频率也不算太高,大家使用qt就是做一个界面,增加一下人机交互而已,平时根本不安装ubuntu界面。**这个时候,要是没有qt,就只能通过网络或者串口的方式,和嵌入式设备做交互了。

今天主要讲的,就是后面一种移植方法。

2、qt编译前的依赖

qt要能正确编译使用,主要依赖于三个部分。第一,linux本身的屏幕驱动是否ok;第二,触控ic的驱动是否ok;第三,tslib是否安装。有了这三部分,再加上qt自身,就可以用利用qt的lib,开发独立界面应用了。

3、屏幕驱动

屏幕驱动是基础。不管是mipi屏幕,还是rgb屏幕,或者是hdmi这种没有屏幕的接口,只要可以显示,那么就会出现设备节点/dev/fb0。每出现这样一个节点,就代表嵌入式soc有一个屏幕。qt底层对屏幕的所有操作,也都是借助于/dev/fb0节点来完成的。所以,本质上qt就是一个中间件,和fatfs、lwip、sqlite这些中间件是一个道理。

4、触控驱动

为了增加体验,很多的屏幕都是触摸屏。想要获得触摸数据,一般会借助于i2c总线和解析芯片,来获得触控信息。触控信号的形式,一般是x+/x-/y+/y-,经过芯片转换成i2c信号,被soc读取。另外,不是所有的屏幕都是触摸屏,只要那些带有触摸信号的屏幕,才有触屏功能,不然只是简单的传统屏幕。

等到驱动ok了之后,我们就会看到/dev/input/event0这样的节点。

5、tslib库

**tslib是专门为触摸屏开发的一个开源软件。**它的作用有两个,一个是触摸屏校准。即,通过显示几个点,以及收到的i2c信号,tuning出一组参数。这组参数,将来可以直接作用于算法,把触摸信号转换成屏幕x、y坐标。另外一个,就是防止抖动,滤波、降低噪声,为上层提供一个统一的接口。这样上层的GUI就可以专注于图形界面的绘制和解析了。

6、qt怎么部署

qt要使用起来,需要这几个部分。第一,基于qt的应用程序;第二,qt库;第三,tslib库;第四,就是环境变量。其中前三部分都需要copy到嵌入式板子上,第四部分需要运行qt应用程序之前设置起来。一切都没有问题之后,就可以执行qt应用程序了。

7、qt下camera的实时显示

**有一些场景是需要在qt界面中同时显示camera数据的,如果soc支持mpp平台的话,建议多多使用。**把qt的底层切换成vo->layer->channel下面的一个通道。这样就可以借助于vo中通道的概念,把qt覆盖在camera图像上显示,顺势借助于中间的透明label控件,就可以达到实时camera显示的目的。

很多低端的soc,cpu非常弱,如果有类似mpp这样的加速平台,一定要多用起来。这样才可以弥补cpu不足带来的劣势,反而达到事半功倍的效果。反之,如果真的靠cpu去搬数据,一张一张来贴图,效果只会惨不忍睹。

相关推荐
Susea&40 分钟前
数据结构初阶:队列
c语言·开发语言·数据结构
慕容静漪42 分钟前
如何本地安装Python Flask并结合内网穿透实现远程开发
开发语言·后端·golang
ErizJ44 分钟前
Golang|锁相关
开发语言·后端·golang
GOTXX1 小时前
【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门
开发语言·数据库·c++·qt·图形渲染·图形化界面·qt新手入门
搬砖工程师Cola1 小时前
<C#>在 .NET 开发中,依赖注入, 注册一个接口的多个实现
开发语言·c#·.net
巨龙之路1 小时前
Lua中的元表
java·开发语言·lua
徐行1101 小时前
C++核心机制-this 指针传递与内存布局分析
开发语言·c++
划水哥~2 小时前
Kotlin作用域函数
开发语言·kotlin
小臭希2 小时前
python蓝桥杯备赛常用算法模板
开发语言·python·蓝桥杯
mosaicwang2 小时前
dnf install openssl失败的原因和解决办法
linux·运维·开发语言·python