王春阳,张家坤,杨海涛
(北方民族大学,计算机科学与工程学院,宁夏银川,750021)
随着嵌入式系统的发展,在Linux下使用Qt开发嵌入式图形用户界面是嵌入式应用的重点[1]。Qt面向嵌入式系统图形用户界面的应用程序开发框架,其库采用C++封装,完全面向对象,可移植性好[2],所以许多厂家都在使用Qt做为开发平台,但是在从Qt4到Qt5的大版本更新中取消了QWS,使用了自己触控模块,导致Qt5无法在某些ARM平台更改屏幕显示方向,并且导致tslib作为触控输入的设备触控失灵。对于工业应用而言,人们习惯使用横屏显示并且使用tslib作为触控输入。Qt5在以上功能的改动导致许多开发人员在硬件选型上不得不更换对应的硬件,增加开发成本。由此可见,使 Qt5在ARM平台实现屏幕旋转和校准tslib触控是非常重要的。
使用 Qt5中的 QGraphicsScene、QGraphicsProxyWidget、QGraphicsView类的相应函数实现屏幕翻转。这些类的主要功能如下:
QGraphicsScene对象是QGraphicsItem对象的容器[3],主要功能如下:
(1)提供管理大量图元的快速接口。
(2)传播鼠标、键盘等事件给场景中的每个图元。
(3)管理图元状态,如图元选择和焦点处理。
(4)提供无变换的渲染功能,如打印。
将需要旋转的窗口加入QGraphicsScene场景中,用QGraphicsProxyWidget代理QGraphicsScene,并且利用QGraphicsProxyWidget的旋转函数旋转90度或者270度。下面是流程图:
图1 屏幕翻转流程图
tslib 是触摸屏应用级的一个程序库,用来封装底层的触摸屏驱动的操作[4]。因为在Qt4中只要配置好tslib的绝对路径与头文件和库的路径就可以使用tslib,但是Qt5增加了自己的触控模块,所以要使用tslib必须开启tslib模块并且需要额外增加tslib的一个库才可以正常使用tslib作为触控输入。
(1)声明QGraphicsScene类的对象:
QGraphics Scene*scene = new QGraphicsScene;
(2)声明QGraphicsProxyWidget类对象,将要旋转的窗口的指针作为参数加入scene中:
QGraphicsProxyWidget*w = scene->addWidget(form);
(3)设置将QGraphicsProxyWidget的对象翻转90度:
w->setRotation(90);
(4)声明QGraphicsView类对象:
QGraphicsView*view = new QGraphicsView(scene);
(5)用resize函数调整view的大小:
view->resize(1200,800);
(6)用show函数将view显示出来:
view->show();
修改profile 文件,校准文件的存放位置,触摸屏设备,指定帧缓冲设备,tslib 库文件路径[5]。
(1)在环境变量中增加QT_QPA_FB_TSLIB=1。
因为Qt5取消了QWS增加了QPA,所以要使用tslib模块作为触控输入必须使用QT_QPA_FB_TSLIB=1开启tslib模块。
(2)在环境变量中增加 LD_PRELOAD=$TSLIB_ROOT/lib/libts.so,$TSLIB_ROOT。
TSLIB_ROOT是tslib所在绝对路径。这样就将tslib相应的库添加进环境变量,然后更新环境变量。
如图2,通过本文所使用的方法,Qt的窗口已经实现顺时针90度的旋转。此时将设计好的Qt程序移植在ARM平台则屏幕也已经顺时针旋转90度。本文所使用方法只能旋转加入QGraphicsScene类的窗口以及他们的子窗口。其他未加入QGraphicsScene类的窗口并不会旋转。
图2 屏幕旋转结果
没有使用本文方法前,触控命中率为 10%。通过本文所使用的方法校准之后触控命中率达到99%。
本文针对当前Qt5在ARM设备上屏幕无法旋转以及tslib触控失灵的问题提出了相应的解决方法。通过本文所使用的方法解决了ARM设备屏幕无法旋转的问题以及tslib在Qt5上触控失灵的问题。
[1]王浩南, 刘益成.基于嵌入式Linux系统下的Qt开发[J].电脑开发与应用, 2010, 23(01): 11-13.
[2]吴燕燕, 贺锋涛.基于ARM9平台上Qt/Embedded的移植与开发[J].液晶与显示, 2013, 28(02): 261-265.
[3]陆文周.Qt5开发及实例[M].北京: 电子工业出版社, 2015: 205.
[4]张敏, 张井岗.Linux平台下支持触摸屏的Qt/Embedded移植[J].计算机技术与展, 2011, 21(10): 154-156+160.
[5]舒明蕾, 华惊宇, 赖尚校.基于DM365平台的Qt/Embedded移植[J].微型机与应用, 2015, 34(05): 19-21.