【?聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱: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去搬數據,一張一張來貼圖,效果只會慘不忍睹。