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去搬數據,一張一張來貼圖,效果只會慘不忍睹。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78716.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

”插入排序“”選擇排序“

文章目錄 插入排序1. 直接插入排序(O(n^2))舉例1:舉例2:直插排序的"代碼"直插排序的“時間復雜度” 2. 希爾排序(O(n^1.3))方法一方法二(時間復雜度更優) 選擇排序堆排序直接選擇排序 我們學過冒泡排序,堆排序等等。(回…

FPGA_BD Block Design學習(一)

PS端開發流程詳細步驟 1.第一步:打開Vivado軟件,創建或打開一個工程。 2.第二步:在Block Design中添加arm核心,并將其配置為IP核。 3.第三步:配置arm核心的外設信息,如DDR接口、時鐘頻率、UART接口等。 …

【Python] pip制作離線包

制作離線安裝包是一種非常實用的方法,尤其是在網絡環境受限或需要在多臺機器上部署相同環境時。以下是詳細的步驟,幫助您創建一個包含所有依賴項的離線安裝包,并在后續環境中復用。 步驟 1:準備工具和環境 確保您有一臺可以訪問互…

為啥物聯網用MQTT?

前言 都說物聯網用MQTT,那分別使用Http和Mqtt發送“Hello”,比較一下就知道啦 HTTP HTTP請求報文由請求行、頭部字段和消息體組成。一個最簡單的HTTP POST請求如下: POST / HTTP/1.1 Host: example.com Content-Length: 5 Content-Type: …

操作系統 ------ 五種IO模型

阻塞IO:一個IO請求操作,準備階段和復制階段都會阻塞應用程序,直到操作完全完成 非阻塞IO:一個IO操作請求,先判斷準備階段是否完成,如果未完成立即返回,否則,進入復制階段&#xff0…

service和endpoints是如何關聯的?

在Kubernetes中,Service 和 Endpoints 是兩個密切關聯的對象,它們共同實現了服務發現和負載均衡的功能。以下是它們之間的關聯和工作原理: 1. Service 的定義 Service 是一種抽象,定義了一組邏輯上相關的 Pod,以及用…

程序化廣告行業(78/89):多因素交織下的行業剖析與展望

程序化廣告行業(78/89):多因素交織下的行業剖析與展望 在程序化廣告這片充滿活力又不斷變化的領域,持續學習和知識共享是我們緊跟潮流、實現突破的關鍵。一直以來,我都渴望能與大家一同探索這個行業的奧秘&#xff0c…

數智化重構供應商管理

當供應鏈韌性成為核心競爭力,你的供應商管理還在 “摸著石頭過河” 嗎? 在傳統模式下,供應商管理高度依賴人工經驗與紙質流程: 入庫篩選如“大海撈針”:供應商資質審核停留在Excel表格比對,資質造假、歷史…

網絡互連與互聯網

1.在路由表中找不到目標網絡時使用默認路由,默認路由通常指本地網關的地址。 2.OSPF最主要的特征是使用分布式鏈路狀態協議,而RIP使用的是距離向量協議。 3.OSPF使用鏈路狀態公告LSA擴散路由信息 4.內部網關路由協議IGRP是一種動態距離矢量路由協議&a…

Raymarching Textures In Depth

本節課最主要的就是學會hlsl中使用紋理采樣 float4 color Texture2DSample(Texobj, TexobjSampler, uv); return color; 課程中的代碼(沒有這張圖我就沒做) 課程代碼產生深度的原因是uv偏移,黑色區域會不斷向左偏移,直到找到白色…

【MQTT-協議原理】

MQTT-協議原理 ■ MQTT-協議原理■ MQTT-服務器 稱為"消息代理"(Broker)■ MQTT協議中的訂閱、主題、會話■ 一、訂閱(Subscription)■ 二、會話(Session)■ 三、主題名(Topic Name&a…

docker容器安裝的可道云掛接宿主機的硬盤目錄:解決群暉 威聯通 飛牛云等nas的硬盤掛接問題

基于Docker部署可道云(KodCloud)時,通過掛載宿主機其他磁盤目錄可實現高效、安全的數據管理。具體而言,使用綁定掛載(Bind Mounts)將宿主機目錄(如/data/disk2)映射到容器內的可道云…

go語言內存泄漏的常見形式

go語言內存泄漏 子字符串導致的內存泄漏 使用自動垃圾回收的語言進行編程時,通常我們無需擔心內存泄漏的問題,因為運行時會定期回收未使用的內存。但是如果你以為這樣就完事大吉了,哪里就大錯特措了。 因為,雖然go中并未對字符串…

es6學習02-let命令和const命令

一、let命令 1.let塊級作用域: let關鍵字 VS var關鍵字 2.for循環計數器很適合let命令 var:整個for循環中一直都是同一個i在做1,最后輸出的就是10; let:每循環一次都是多一個i的賦值,最后輸出是可以調出…

MySQL深分頁問題

在項目中有一個數據導出的需求,原來的實現方式也比較簡單,根據查詢條件分頁查所有的數據,然后轉成csv的格式一行一行寫進文件存儲中。 實際上線之后,發現出現了慢查詢,具體的sql如下: select * from tabl…

前端面試寶典---創建對象的配置

Object.create 對整個對象的多個屬性值進行配置 創建對象 不可更改屬性值 // 創建對象 不可更改屬性值 let obj Object.create({}, {name: {value: lisi,writable: false,},age: {value: 20,writable: true,} })console.log(初始化obj, obj) obj.name wangwu console.log(…

數據結構:C語言版嚴蔚敏和解析介紹,附pdf

《數據結構:C語言版(第2版)》嚴蔚敏李冬梅吳偉民.pdf 《數據結構:C語言版》嚴蔚敏,李冬梅.pdf 《數據結構C語言第2版習題解析與實驗指導》李冬梅.pdf 「《數據結構:C語言版(第2版 )》…

深入理解 v-for 指令及其使用方法

在 Vue.js 中,v-for 是用于渲染列表的核心指令,它允許你通過循環渲染數據源中的每一項。通過 v-for,你可以輕松地將數組、對象或其他可迭代的數據渲染成 HTML 元素。本文將詳細介紹 v-for 的基本用法、常見的應用場景、最佳實踐及性能優化&am…

VIRT, RES,SHR之間的關系

VIRT、RES 和 SHR 是進程內存使用的三個關鍵指標,它們之間的關系反映了進程的內存分配和使用情況。以下是它們的定義和關系: VIRT(虛擬內存):表示進程分配的虛擬內存總量,包括所有代碼、數據、共享庫、堆棧…

2025屆藍橋杯JavaB組個人題解(暫時不全,沒題目)

2025 屆藍橋杯 Java B 組題解 第一次參加藍橋杯,輸入輸出都用的BufferedReader和PrintWriter,怕輸入輸出不對或者內存超限,也怕出現小錯誤運行不了的,比如Main打成Mian什么的,但還是希望能拿省一,這里給出自…