王春陽,張家坤,楊海濤
(北方民族大學,計算機科學與工程學院,寧夏銀川,750021)
隨著嵌入式系統(tǒng)的發(fā)展,在Linux下使用Qt開發(fā)嵌入式圖形用戶界面是嵌入式應用的重點[1]。Qt面向嵌入式系統(tǒng)圖形用戶界面的應用程序開發(fā)框架,其庫采用C++封裝,完全面向對象,可移植性好[2],所以許多廠家都在使用Qt做為開發(fā)平臺,但是在從Qt4到Qt5的大版本更新中取消了QWS,使用了自己觸控模塊,導致Qt5無法在某些ARM平臺更改屏幕顯示方向,并且導致tslib作為觸控輸入的設備觸控失靈。對于工業(yè)應用而言,人們習慣使用橫屏顯示并且使用tslib作為觸控輸入。Qt5在以上功能的改動導致許多開發(fā)人員在硬件選型上不得不更換對應的硬件,增加開發(fā)成本。由此可見,使 Qt5在ARM平臺實現(xiàn)屏幕旋轉和校準tslib觸控是非常重要的。
使用 Qt5中的 QGraphicsScene、QGraphicsProxyWidget、QGraphicsView類的相應函數(shù)實現(xiàn)屏幕翻轉。這些類的主要功能如下:
QGraphicsScene對象是QGraphicsItem對象的容器[3],主要功能如下:
(1)提供管理大量圖元的快速接口。
(2)傳播鼠標、鍵盤等事件給場景中的每個圖元。
(3)管理圖元狀態(tài),如圖元選擇和焦點處理。
(4)提供無變換的渲染功能,如打印。
將需要旋轉的窗口加入QGraphicsScene場景中,用QGraphicsProxyWidget代理QGraphicsScene,并且利用QGraphicsProxyWidget的旋轉函數(shù)旋轉90度或者270度。下面是流程圖:
圖1 屏幕翻轉流程圖
tslib 是觸摸屏應用級的一個程序庫,用來封裝底層的觸摸屏驅動的操作[4]。因為在Qt4中只要配置好tslib的絕對路徑與頭文件和庫的路徑就可以使用tslib,但是Qt5增加了自己的觸控模塊,所以要使用tslib必須開啟tslib模塊并且需要額外增加tslib的一個庫才可以正常使用tslib作為觸控輸入。
(1)聲明QGraphicsScene類的對象:
QGraphics Scene*scene = new QGraphicsScene;
(2)聲明QGraphicsProxyWidget類對象,將要旋轉的窗口的指針作為參數(shù)加入scene中:
QGraphicsProxyWidget*w = scene->addWidget(form);
(3)設置將QGraphicsProxyWidget的對象翻轉90度:
w->setRotation(90);
(4)聲明QGraphicsView類對象:
QGraphicsView*view = new QGraphicsView(scene);
(5)用resize函數(shù)調整view的大?。?/p>
view->resize(1200,800);
(6)用show函數(shù)將view顯示出來:
view->show();
修改profile 文件,校準文件的存放位置,觸摸屏設備,指定幀緩沖設備,tslib 庫文件路徑[5]。
(1)在環(huán)境變量中增加QT_QPA_FB_TSLIB=1。
因為Qt5取消了QWS增加了QPA,所以要使用tslib模塊作為觸控輸入必須使用QT_QPA_FB_TSLIB=1開啟tslib模塊。
(2)在環(huán)境變量中增加 LD_PRELOAD=$TSLIB_ROOT/lib/libts.so,$TSLIB_ROOT。
TSLIB_ROOT是tslib所在絕對路徑。這樣就將tslib相應的庫添加進環(huán)境變量,然后更新環(huán)境變量。
如圖2,通過本文所使用的方法,Qt的窗口已經(jīng)實現(xiàn)順時針90度的旋轉。此時將設計好的Qt程序移植在ARM平臺則屏幕也已經(jīng)順時針旋轉90度。本文所使用方法只能旋轉加入QGraphicsScene類的窗口以及他們的子窗口。其他未加入QGraphicsScene類的窗口并不會旋轉。
圖2 屏幕旋轉結果
沒有使用本文方法前,觸控命中率為 10%。通過本文所使用的方法校準之后觸控命中率達到99%。
本文針對當前Qt5在ARM設備上屏幕無法旋轉以及tslib觸控失靈的問題提出了相應的解決方法。通過本文所使用的方法解決了ARM設備屏幕無法旋轉的問題以及tslib在Qt5上觸控失靈的問題。
[1]王浩南, 劉益成.基于嵌入式Linux系統(tǒng)下的Qt開發(fā)[J].電腦開發(fā)與應用, 2010, 23(01): 11-13.
[2]吳燕燕, 賀鋒濤.基于ARM9平臺上Qt/Embedded的移植與開發(fā)[J].液晶與顯示, 2013, 28(02): 261-265.
[3]陸文周.Qt5開發(fā)及實例[M].北京: 電子工業(yè)出版社, 2015: 205.
[4]張敏, 張井崗.Linux平臺下支持觸摸屏的Qt/Embedded移植[J].計算機技術與展, 2011, 21(10): 154-156+160.
[5]舒明蕾, 華驚宇, 賴尚校.基于DM365平臺的Qt/Embedded移植[J].微型機與應用, 2015, 34(05): 19-21.