【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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去搬数据,一张一张来贴图,效果只会惨不忍睹。