天天看点

tiny6410的Qt4的移植和第一个Qt4软件的运行以及如何在qtopia下运行自己的qt4程序

开发环境:fedora9   linux-2.6.38   arm-linux-gcc 4.5.1

基于tiny6410的软硬件环境,tslib用的开发板文件系统自带的,用的一线校准,基本上是按照《Mini6410 Qt4和Qtopia编程开发指南-20110112》进行的移植,之所以要走一遍流程是为了接下来的不用一线校准的板子的开发。

这里主要总结一下遇到的问题及解决方法:

1、运行程序HelloQt4时,提示:./HelloQt4: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory

原因:

下面是setqt4env的内容:

#!/bin/sh

if [ -e /etc/friendlyarm-ts-input.conf ] ; then

        . /etc/friendlyarm-ts-input.conf

fi

true    ${TSLIB_TSDEVICE:=/dev/touchscreen}

TSLIB_CONFFILE=/etc/ts.conf

export TSLIB_TSDEVICE

export TSLIB_CONFFILE

export TSLIB_PLUGINDIR=/usr/lib/ts

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_DISPLAY=:1

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH         #export LD_LIBRARY_PATH=/opt/Qt4.7/lib  用这句话替换前面的,因为自己移植的Qt4放在了/opt目录

export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin  

if [ -c ${TSLIB_TSDEVICE} ]; then

        export QWS_MOUSE_PROTO="Tslib MouseMan:/dev/input/mice"

        if [ ! -s /etc/pointercal ] ; then

                rm /etc/pointercal

                /usr/bin/ts_calibrate

        fi

else

        export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"

fi

export QWS_KEYBOARD=TTY:/dev/tty1

export HOME=/root

2、程序运行后无法使用触摸屏

由于qtopia2.2和Qt4无法共存,所以在运行Qt程序前必须关掉qtopia2.2,之前忘记了这一点。

关闭方法:设置-->关机-->Terminate Server

自己的猜测:友善之臂开发板在qtopia2.2环境下运行Qt4程序,退出后又回到qtopia环境下,进行自由切换,用的就是这种原理,但是我在文件系统中在/bin目录下找到了启动qtopia的脚本qtopia,但是找不到关闭qtopia的脚本,至于友善之臂的qt软件实现这些切换的代码也就不知道了。

3、HelloQt4运行后字体很小

这是由于qt软件运用到嵌入式环境,屏幕分辨率比较小,字体也相应变小了,可以在编程中统一把字体设置大一点。

同时我也找到另外一种方法:

在 setqt4env 脚本中把

export QWS_DISPLAY=:1

改为:

export QWS_DISPLAY="LinuxFb:mmWidth160:mmHeight90:1"

问题解决

如果你已经运行过错误的 setqt4env 脚本。 那么你必须直接在console中直接

 export QWS_DISPLAY="LinuxFb:mmWidth160:mmHeight90:1"

另:由于不知道友善之臂具体是怎么用代码实现切换的,不过可以用另外一种方法实现在qtopia2.2下运行自己的qt4程序

修改 /bin/qt4 脚本,将下面这两行换成你的程序路径和名称:

cd /usr/local/Trolltech/QtEmbedded-4.7.0-arm/demos/embedded/fluidlauncher
./fluidlauncher -qws      

然后在Qtopia2.2.0中点击Qt4的图标,应该可以运行自己的程序了,可以把相应的图标也替换掉。

————————————————————————————————————————————————————————

附:今天看到一个命令,exec

百度百科对他的解释如下:

exec函数族,顾名思义,就是一簇函数,他把当前进程映像替换成新的程序文件,而且该程序通常main函数开始执行!

用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其 main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。

看到进程ID没有改变,想到了Qtopia2.2和Qt4软件切换的问题,由于Qt4软件是用脚本来启动的,而且脚本最后有这样一句话

exec ./myplayer -qws 1>/dev/null 2>/dev/null

也就是说qt4软件的进程ID和脚本ID是一样的那么只要杀死这个ID,qt4软件就退出了。

切换的大致步骤:

kill掉qtopia2.2的进程,运行脚本,退出或kill掉启动qt4软件的脚本的ID,启动qtopia2.2。

又感觉不需要exec也可以这样,等以后再来看看,遇到新想法的话再来解决。

继续阅读