QT自从被Nokia抢走以后改动比较大,加入了一些新的特性,也变的更加通用,支持更多的平台,也把Trolltech混乱的版本结构理了理,我觉得还是不错的。QT/E 4.6以后的版本都叫做everywhere,可见其野心啊。。。只有4.5以上的版本是用的LGPL,所以不想公开源代码的人要注意了。
本文用的是qt-everywhere-opensource-src-4.6.2.tar.gz,tslib-1.4.tar.gz,Ubuntu 10.04,GCC 4.4.3,arm-linux-gcc 4.3.2,一个华丽的组合,基本都是目前能找到的最新的东东。
由于网上的移植教程泛滥,我就只是大概讲一下我的移植步骤和经验:
1 安装交叉编译工具
我用的是开发板上的arm-linux-4.3.2,建议用越新的编译器越好,网上用低版本的人都会出现各种错误,不是要改代码就是改配置文件,千万别被忽悠了。
2 编译tslib
我用的tslib1.4,过程中会有一些小问题,网上有解决方法。
./autogen.sh #用于生成configure脚本,要装autoconf
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
#产生一个cache文件arm-linux.cache,欺骗configure,tslib的bug
./configure --host=arm-linux --prefix=/opt/tslib-install --cache-file=arm-linux.cache
make
make install
交叉成功后在目标位置产生/bin、/etc、/include、/lib 4个文件夹。
网上很多人说在configure的时候要加上--enable-inputapi=no,我想请问1.4里有这个选项么,抄帖子为何都不先自己试试,每当这次我就很鄙视把它搜出来的搜索引擎,害人啊害人。网上人加的这个选项估计是—enable-input=no,但这个也是要看情况的,tslib默认会把所有raw module编进去,像笔者用的mini2440的触摸屏就是基于linux的input设备的,把它disable掉肯定就废了,所以建议全部编译才是王道。
3 编译QT/E
如果你采用的也是笔者的arm-linux-4.3.2的话,那就什么都不用改,直接配置编译就好,否则的话就去网上找找大家是怎么改代码和配置文件的。
以下是笔者的配置文件:
a)
#!/bin/sh
./configure \
-embedded arm \
-prefix /nfs/qt \
-release -shared \
-opensource \
-no-largefile \
-no-qt3support \
-xplatform qws/linux-arm-g++ \
-qt-gif -qt-libpng -qt-libjpeg –qt-zlib \
-iconv -little-endian -qt-freetype \
-depths 16,18,24,32 \
-no-qvfb \
-qt-sql-sqlite -no-kbd-qvfb -no-mouse-qvfb -no-glib \
-qt-mouse-tslib \
-nomake tools \
-L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib
多余的就不解释了,自己应该都可以理解。
1) -qt-mouse-tslib是为了我们要用tslib;
2) 和qvfb有关的我也全都干掉了,我的理解是有些人为了要在X11上运行、调试,所以要在X11上模拟一个framebuffer,本文是基于一个真实的设备,所以也就不需要了,而且就算想调试,用Windows版的岂不是更爽。
3) -L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib,这是交叉编译的库文件目录,这个选项一定要有,而且很重要,一定要写对。
接下来就是无聊的configure,make,make install。
其实4.6.2很好编,只要理解configure的内容就好,还有就是不要太相信网上的。
4 应用tslib
把编译好的tslib全部考进开发板,接下来设置一些环境变量:
export TSLIB_ROOT=/home/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
以上的这样根据自己的开发平台而定。然后要修改一个配置文件。Tslib虽然默认编译了所有的raw module,但是却一个都没有启用,真是另人费解。笔者是把etc/ts.conf里的# module_raw input这行的注释给取消了,配置文件中的其实参数请上网查看。
这样就可以用bin下的测试程序了。这时要想在QT中支持触摸屏的话只需要启动它内嵌的鼠标设备就好了,实际中是设置一个环境变量:
export QWS_MOUSE_PROTO='tslib:/dev/input/event0'
这样就可以开始编程了。
5 总结
虽然我被网上的人浪费了一些时间,总体QT/E还是无罪的,mini2440比pxa270的处理器要弱,但是运行QT的速度感觉差不多,说明QT变快了。以前在pxa270上用的是QT/E 4.4。
触摸屏感觉不错,其实大都的触摸屏都感觉不错的说,只是用亿道的触摸屏用出阴影了。