我下面讲的主要针对qte3! 我相信很多朋友都碰到过如下问题: 1. 买来的开发板上是qt2,想升级到qt3或者4。 2. 升级好办,网上的文章一大把,但是,涉及到一些细节就难办了,关键是摸不着头脑,特别对于初学者,例如如何让qte支持触摸屏,这对于初学者是一件很难琢磨的事。 今天,我只讲触摸屏的故事。如果您是高手请绕道,呵呵! 注:驱动程序,对于这个我不废话,现在从任意开发板上自带的驱动程序中copy的都能用啦呵呵! 首先,讲讲qte的输入,可以是鼠标,触摸屏,标准键盘和自定义键盘,有关自定义键盘,我下次给大家讲。 其次,如果选择触摸屏作为输入,我们需要一种工具,这种工具的作用是“接口”,让触摸屏的驱动程序连接到你的qte上的,这种工具就是一些鼠标协议,在qte3中如用触摸屏可以选用linuxtp这个协议,可能有人会问,为什么是“鼠标协议”,其实,触摸屏本身不过是一个没有右键的鼠标! 如果,我们在qte3中就按上面说的那么做,即如下: 1) export环境变量 export QTDIR=/qte/qte-3.3.4 export QTEDIR=$QTDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 2) 运行./configure cd $QTDIR ./configure -depths 4,8,16 -no-ipv6 -no-cups -no-pch -qvfb -embedded arm -qt-gif -thread -qt-mouse-linuxtp 3) 复制uic命令 cp /qte/qte-3.3.5-host/bin/uic /qte/qte-3.3.4-target/bin/ 4) 为了支持触摸屏(和IPAQ兼容的) 在src/embedded/qmouselinuxtp_qws.h中加入 #define QWS_MOUSE_IPAQ #define QWS_MOUSE_IPAQ_RAW #define QT_QWS_IPAQ 5) 编译Qt/Embedded函数库 make sub-src 这样的效果肯定不好,为什么呢,因为没有校准,什么是校准? 这个问题有点复杂,其实我们弄触摸屏的校准有以下几种办法: 1. 利用qtopia,这里的校准当然是自带的,也没什么好说的,如果你想方便,那就把你的程序建立在qtopia里。 2. qte2自带一种鼠标协议叫tslib,这个同时也带有校准功能的。 3. 对于qte3,我要重点说明一下,下面来说说,qte3的校准: 对了,还没有说什么是校准,就是你看见的qtopia开始运行时要你点的那5个点,什么作用,自己想!嘿嘿! 什么是tslib,请大家google一下! qte3不带tslib,要使用触摸屏有2个方法: 1. 给它添加一个tslib,但我们只用tslib的校准文件,鼠标协议还用qte3自带的linuxtp,这样的好处是:简单,坏处是:不能发挥 tslib强大的去抖,滤波的功能,具体安装方法见:http://blog.chinaunix.net/u1/33412/showart_282396.html,但注意一点:export QWS_MOUSE_PROTO=TPanel:/dev/touchscreen/0raw这句话改成:export QWS_MOUSE_PROTO=linuxtp :/dev/touchscreen/0后面是触摸屏节点,对照你的改改就OK,前面的话,我的qte3版本是3.3.0,鼠标协议有linuxtp,那位大姐的TPanel,我这没有,大家看吧,反正我这个是通过我验证的。 2. 如果有一天你发现你的触摸屏用起来不是很爽,反应迟钝,有”漂”的感觉,那我告诉你,哥们,那就对了,你一直埋没了tslib,下面我们要将它真正加入到qte3里去啦:参考文章http://blog.chinaunix.net/u1/55409/showart_457824.html补丁见附件(写着qte3.3.4,其实都能用),注意一下,我在FC6下,3.3.0的版本用的编译器3.3.2没有问题的,另外,我用编译好的qte库编译应用程序时,报错,undefined reference to ‘ts_close’等。网上有人说是在编译qte时生成的库文件libqte.so可能就没有链接上tslib,我认为不对,你只需要修改你的qte应用程序的makefile第22行(qte3.3.0版本),在-lqte之前加一句-lts就OK了。 3. 最后如果你发现效果还不是很好,那就对了,请你看一下这篇文章:http://fanzhichao.blog.hexun.com/23379919_d.html 效果如下(tslib自带的test程序测试的):(第一行时间第xx秒,第二和第三行是x和y轴坐标,最后一行,我也不知道啥意思) 去抖前 728.030266: 395 239 500 728.070280: 393 245 500 728.110267: 400 242 500 728.150284: 392 242 500 728.190303: 400 242 500 728.230267: 390 242 500 728.270281: 396 246 500 728.310266: 394 240 500 728.350282: 397 246 500 728.390279: 393 239 500 728.430294: 396 243 500 728.470286: 396 240 500 728.510269: 392 245 500 728.550285: 396 242 500 728.590284: 392 246 500 728.630268: 396 243 500 728.670281: 392 242 500 728.710267: 396 239 500 728.750278: 390 246 500 728.790279: 400 243 500 去抖后: 72.015465: 340 231 500 72.055455: 340 231 500 72.095476: 340 231 500 72.135457: 340 231 500 72.175474: 340 231 500 72.215464: 340 231 500 72.255487: 340 231 500 72.295455: 340 231 500 72.335473: 340 231 500 72.375454: 340 231 500 72.415458: 340 231 500 72.455494: 340 231 500 72.495457: 340 231 500 72.535476: 340 231 500 72.575457: 340 231 500 72.615459: 340 231 500 72.655472: 340 231 500 72.695490: 340 231 500 72.735467: 340 231 500 72.775453: 340 231 500 72.815458: 340 231 500 72.855542: 340 231 500 72.895456: 340 231 500 ……