当前位置: 首页 > news >正文

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去搬数据,一张一张来贴图,效果只会惨不忍睹。

相关文章:

  • 具身智能零碎知识点(三):深入解析 “1D UNet”:结构、原理与实战
  • Python_levl2.3函数
  • 【AutoTest】自动化测试工具大全(Python)
  • 限流、降级、熔断、隔离?
  • 【Hyperlane 】轻松实现大文件分块上传!
  • 六、测试分类
  • Python中NumPy的逻辑和比较
  • API 请求失败时的处理方法
  • 如何使用MaxScript+dotNet在UI中显示图像?
  • 大模型LLM表格报表分析:markitdown文件转markdown,大模型markdown统计分析
  • SpringBoot分布式项目中实现智能邮件提醒系统
  • 深度学习学习笔记
  • 【c语言】猜凶手
  • (十九)安卓开发中的Application类的使用详解
  • LLaMA-Factory双卡4090微调DeepSeek-R1-Distill-Qwen-14B医学领域
  • Python itertools模块的groupby函数介绍
  • ctfshow WEB web12
  • 【力扣05】最长回文子串
  • Transformer 分布式训练代码
  • 蓝队技能-Web入侵-入口查杀攻击链
  • 学历网站怎么做/重庆网站排名
  • dreamwear做网站步骤/南昌seo实用技巧
  • 网站后期维护怎么做/最简单的营销方案
  • 德阳手机网站建设/关键词分析工具
  • 商丘网站建设哪家专业/百度卖货平台
  • 买公司的网站建设/郑州网络推广排名