QT2移植(支持触摸屏与鼠标)

尽管现在QT5马上就要出来了,但是作为历史的记录,现把QT/E2的移植方法发布出来,希望对有需要的朋友有所帮助。适当的时候我会把QT3-QT4的移植方法也总结出来。

最近发现有很多老师和学生对QT/E触摸屏的问题很困惑,抽了一天时间我整理测试了一个方法,此方法是在前一次我写的之上的补充,测试没问题可以触摸屏和鼠标一起用,发布下来:   

#######需要的相关软件包:
qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2.tar.gz
tmake-1.13.tar.gz
tslib.tar.gz
#######解压上面的相关包以后,有以下几个目录:
qt-2.3.10
qt-2.3.2
tmake-1.13
tslib
tslib-install
这些解压以后的目录都放在同一个目录下,例如,我把他们都放在了/root/arm2410QT/下
#######设置相关的环境变量
这些环境变量都是在/root/arm2410QT 下设置的,因为我把上面解压以后的文件夹放在了此目录下.
export QTEDIR=$PWD/qt-2.3.10
export QT2DIR=$PWD/qt-2.3.2
export TMAKEDIR=$PWD/tmake-1.13
export TSLIBDIR=$PWD/tslib
export TSLIBINST=$PWD/tslib-install
export LD_LIBRARY_PATH=$TSLIBINST/lib
export CC=arm-linux-gcc
cd tslib
./autogen.sh --host=arm-linux --prefix=$TSLIBINST

//make clean

make -j4
make install
########注意::在编译qte-2.3.10和qte-2.3.2时,$TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf文件中
             “TMAKE_LINK= arm-linux-gcc”
             “TMAKE_LINK_SHLIB= arm-linux-gcc”
              一定是上面的那样,用gcc
#####cp tslib to qte lib dir
cp -a $TSLIBDIR/src/.libs/*   $QTEDIR/lib/
cp -a $TSLIBDIR/plugins/.libs/*.so  $QTEDIR/lib/
cp -a $TSLIBINST/bin/*     $QTEDIR/bin
cp -a $TSLIBINST/etc/ts.conf  $QTEDIR/.
cp -a  $TSLIBINST/include/ts*  $QTEDIR/include/.
####Build Qt/X11 2.3.2
cd $QT2DIR
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -no-opengl -no-xft

 

make
cp -f bin/uic $QTEDIR/bin/       //没有这一步也可以

#####Build Qt/Embedded
编译之前要修改一些东西
1.在 qt-2.3.10/src/kernel/ 下,修改qwsmouse_qws.cpp程序,此文件中有3处/etc/pointercal,把这3处的etc修改成tmp
 ,因为开发板是在/tmp/下找到校正信息温暖文件的,"pointercal"这个名子随便改,只要在接下来的环境变量设置时,
写成相应的就行(看接下来的几步)
2.修改 /qt-2.3.10/configs/linux-arm-g++-shared文件:
  #Linking application下的SYSCONF_LIBS = -lm  修改为 SYSCONF_LIBS=-lm -lts
  #Linking shared libraries 下的 SYSCONF_LINK_SHLIB=arm-linux-gcc修改为
   SYSCONF_LINK_SHLIB=arm-linux-gcc -lts
修改完后,开始编译 qte-2.3.10
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QT2DIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH
mv src/tools/qconfig-large.h   src/tools/qconfig-my.h
./configure -xplatform linux-arm-g++ -qconfig my -no-qvfb -depths 16 -tslib -thread -I$TSLIBINST/include -L$TSLIBINST/lib    


make sub-src
这样编译工作就完成了,生成的支持触摸屏的库在qte-2.3.10/lib下,把这些库考到开发板的/usr/lib/下即可
########以下为arm2410-S开发板上的工作
设置环境变量
export QTDIR=/usr/
export QTEDIR=/usr/
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/tmp/ts.conf
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CALIBFILE=/tmp/ts-calib.conf
export TSLIB_PLUGINDIR=/usr/lib
export QT_TSLIBDIR=/usr/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
export QWS_SIZE=640x480
export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB"
export LANG=zh_CN
insmod /mnt/yaffs/touchscreen/ts-uptech.o
在主机的tslib-install/etc有ts.conf,把他考到开发板的/tmp下.
再把tslib-install/bin下的三个可执行程序ts_calibrate考到开发板上,其中ts_calibrate为触摸屏的校正程序.
如果是第一次运行触摸屏程序需要在开发板上运行ts_calibrate进行校验,此时会在开发板的/tmp/下生成上面提到的pointercal程序文件,此程序是为
以后应用程序服务的,要用他来进行校正.会自己保存供以后使用

注意把/root/arm2410QT/tslib/下的plugins拷贝到开发板/usr/lib下

否则不指定export TSLIB_PLUGINDIR=/usr/lib的话将报错:Cannot configure touchscreen (No such file or directory)
##########编译应用程序测试
在主机上编译一个应用程序,在qte-2.3.10/exmples/下有应用序.
注意: 编译应用程序时,要修改tmake-1.13/lib/qws/linux-arm-g++/tmake.conf文件
        将其中的: “TMAKE_LINK= arm-linux-gcc”
                  “TMAKE_LINK_SHLIB= arm-linux-gcc”
        修改为  : “TMAKE_LINK= arm-linux-g++”
                 “TMAKE_LINK_SHLIB= arm-linux-g++”
编译应用程序需要的环境变量:
             TMAKEDIR,TMAKEPATH,QTEDIR,QTDIR 如:

export TMAKEDIR=$PWD/tmake-1.13
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.10
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
   
俄罗斯方块游戏举例测试:在/root/arm2410QT/目录下设置编译环境变量:注意arm2410QT为自己编译好的库的环境目录

export TMAKEDIR=$PWD/tmake-1.13
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.10
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

之后在进入要编译例子目录:

[root@BC arm2410QT]# cd qt-2.3.10/examples/tetrix/

[root@BC tetrix]# /root/arm2410QT/tmake-1.13/bin/tmake -o Makefile tetrix.pro

[root@BC tetrix]# make

即可生成ARM可执行的应用程序tetrix  接下来想什么办法也可以让ARM运行它吧!方法很多 挂载 下载 这里就不罗嗦了

注释: 编写自己的Makefile时候可能要手动修改编译参数 加上 -lts

      设备驱动有可能不是event0 需要具体设置

      qconfig-my.h 配置文件可以随意

      找不到库的话就手动到编译器的库路径中添加

常见错误:

error:./win: relocation error: ./win: undefined symbol: _ZN11QMetaObject14new_metaobjectEPKcS1_P9QMetaDataiS3_iP10QClassInfoi
原因是编译的库和应用程序不匹配
图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看


例子
第一个汉化程序for sprife
编译时候错误:
arm-linux-g++  -o tetrix gtetrix.o qdragapp.o qtetrix.o qtetrixb.o tetrix.o tpiece.o moc_qdragapp.o moc_qtetrix.o moc_qtetrixb.o  -L/root/arm-qt2/qt-2.3.10/lib -lm -lqte -lts
/root/arm-qt2/qt-2.3.10/lib/libts.so: undefined reference to `dlsym'
/root/arm-qt2/qt-2.3.10/lib/libts.so: undefined reference to `dlopen'
/root/arm-qt2/qt-2.3.10/lib/libts.so: undefined reference to `dlclose'
collect2: ld returned 1 exit status
make: *** [tetrix] 错误 1
解决:在makefile或tmake-1.13/lib/qws/linux-arm-g++/tmake.conf中修改参数 -ldl
ARM上执行错误:
[/usr]./tetrix -qws
nfs: server 192.168.1.111 not responding, still trying
解决:
mount -o rsize=4096,wsize=4096 192.168.1.111:/sprife/qt2-test /usr/

错误:
[/usr]./tetrix -qws
Could not read calibration: /tmp/pointercal
2: option `module_raw' not recognisedCannot configure touchscreen (No such file or directory)
解决:
把cp tslib1.4-install/lib/*  /sprife/qt2-test/lib中

修改/tmp/ts.conf文件,打开输入设备支持如下
# Uncomment if you wish to use the linux input layer event interface
module_raw input

?编译QT库时出现freetype问找不到
#ln -s /usr/include/freetype2/freetype /usr/include/freetype

?编译qvfb时临时文件tmake.conf找不到
#tmake.conf在¥TMAKEDIR/lib/linux-g++/中
#export TMAKEPATH=$TMAKEDIR/lib/linux-g++
#/root/2410clQt/tmake-1.13/bin/tmake -o Makefile qvfb.pro

?编译在X86环境中时Qt/E环境,两处出错无法进入qt2.3.10/tutorial文件
#此问题可以忽略,实验中用不到此环境 如需要还需以full-config形式重新编译库

?在编译X86本机QT环境执行./launcher 时会出现一个错误的提示
#此问题不影响实验

?编译应用程序时候提示 tmake.conf 找不到
#TMAKEPATH 路径不正确

?make 或tmake的时候出现libqtso.*相关库找不到
# 相关的libqt库编译不正确或没编译

?编译qtopia的时候luuid库找不到
#可以将e2fsprog-libs-1.37.tar.gz解压后在其目录中
./configure --enable-elf-shlibs
make clean
make
make install
cd qtopia-free-2.2.1/
make

如果提示:can’t open framebuffer device /dev/fb0 可以执行:ln –sf /dev/fb/0 /dev/fb0
如果提示:Qt/Embedded data directory is not owned by user 0:/tmp/qtembedded-0
运行:chown root:root /tmp/qtembedded-0
如果提示:Qtopia data directory is not owned by user 0:/tmp/qtopia-0
运行:chown root:root /tmp/qtopia-0

    在编译相关库和工具的时候建议用file命令查看下环境变量是否正确并仔细检查命令的输入,尽量不要弄错以免麻烦。

此文档已 经十分详细,根据具体平台做适当更改后,相信应该可以运行起来^^  做嵌入式还是要多看书多动手,碰到问题不要等别人解决,主动想办法才是   --sprife

转帖子波创科技论坛

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值