折腾了一天多,终于弄通了

达到的效果是,无论当前你的PC Linux上已经安装的qt版本多么复杂

实现 qt 4.5.2 在PC上模拟编译执行 + ARM上的qt embedded-linux 4.5.2交叉编译(tslib触屏支持)

+直接使用Qt Creator在pc上开发PC、板子都能跑的程序

实现以上功能,真的体会到Qt真TMD的,繁琐复杂又强大

整个过程也是充满曲折的,网上资料概念上的误导无处不在

qt-x11-opensource-src-4.5.2.tar.gz 是PC上的模拟、编译、执行 用的

qt-embedded-linux-opensource-src-4.5.2.tar.gz

是构建目标机上的可执行文件用的,你当然可以把它也编译成x86版本的,但是不能替代qt-x11-opensource-src-

4.5.2.tar.gz的作用。这里仅仅需要把arm版本的编译出来即可

整个过程需要4G以上的磁盘空间,使用虚拟机的童鞋千万要小心,没有剩余空间的话后果很惨的(不能开机),切记。编译过程大约4、5小时,看配置了,很痛苦的等待。

1 qt-x11-opensource-src-4.5.2.tar.gz  很简单

参见但不要全信他的

解压、 ./configure ;make ;make install; ,标准的3板斧即可

可以选择 ./configure -nomake examples -nomake demos -nomake tools 不编实例等

然后试试执行 /usr/local/Trolltech/Qt-4.5.2/examples/widgets/digitalclock/digitalclock -qws

根本没有用到什么qvfb,不过我的机器支持了fb,我想没有联系。要增加fb支持也就是一条内核启动参数的小事。

然后试试编译一个Qt工程,可以到源码里的 qt-x11-opensource-src-4.5.2.tar.gz的/examples/里找,如

/examples/widgets/digitalclock/,删掉所有 除.cpp .h 之外的文件,使用你刚才编译出来的qmake

执行/usr/local/Trolltech/Qt-4.5.2/bin/qmake -v

QMake version 2.01a

Using Qt version 4.5.2 in /usr/local/Trolltech/Qt-4.5.2/lib

可以看到,无论你以前的Qt版本多么混乱,这个Qmake不会乱,不用担心之前的版本影响

只要选对了qmake,万事无忧

在/examples/widgets/digitalclock 里执行

/usr/local/Trolltech/Qt-4.5.2/bin/qmake -project

/usr/local/Trolltech/Qt-4.5.2/bin/qmake

make

然后就可以 ./digitalclock -qws    ,很简单地PC端的编译和模拟就实现了

2、 qt-embedded-linux-opensource-src-4.5.2.tar.gz 才是重点

解压之后修改源码,去掉鼠标指针:

cd qt-embedded-linux-opensource-src-4.5.2/src/gui/embedded/

找到 qwscursor_qws.h,在里面加上#define QT_NO_QWS_CURSOR

如果你的工具链名称不是 arm-linux-gcc 这样的,需要到/qt-embedded-linux-opensource-src-4.5.2/mkspecs/qws/linux-arm-g++ 下改qmake.conf ,全部都要改对

然后是最最关键的config ,依照个人情况修改,不具有通用性。当然,之前你要移植好tslib

我用的是

./configure -release -shared -fast -pch -no-qt3support -qt-sql-sqlite

-no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype

-xplatform qws/linux-arm-g++ -embedded arm -depths 4,8,16,32

-little-endian -qt-kbd-usb -no-openssl -nomake examples -nomake demos

-nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups

-no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm

-no-xinerama -no-xshape -no-separate-debug-info -no-qvfb

-qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -no-webkit

-confirm-license -qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib 2>../configureERR11.txt

注意黑体,一定要根据你的情况选择

然后就是 make ;make install ;

之后的道理一样,只要用对了qmake,就能得到arm上跑的程序

/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin/qmake

-------

要真在板子上跑需要做很多工作

把编译完的 LIB 库加到你的文件系统中:

#cd 你的板子的根文件系统

#cd opt

#mkdir qt

#mkdir qtopia

#mkdir qt/lib (存放你的 QT 库)

#mkdir qtopia/bin(存放你的 QT 应用程序)

#cp qt-embedded-linux-opensource-src-4.5.2/lib/* qt/lib/

#cp qt-embedded-linux-opensource-src-4.5.2/examples/mainwindows/menus/menus qtopia/bin

自然需要一个脚本来设置环境

没有通用性,得看屏和tslib移植

我用的是自己写的startqt4.5.2.sh

#!/bin/sh

export TSLIB_ROOT=/tslib

export TSLIB_TSDEVICE=/dev/event0

export set TSLIB_TSDEVICE=/dev/event0

export set TSLIB_CONFFILE=/tslib/etc/ts.conf

export set TSLIB_PLUGINDIR=/tslib/lib/ts

export set TSLIB_CALIBFILE=/etc/pointercal

export set HOME=/root

export set QTDIR=/opt/qt

export set QPEDIR=/opt/qtopia

export set KDEDIR=/opt/qt

export set QWS_DISPLAY="LinuxFB:/dev/fb0"

export set QWS_DISPLAY="LinuxFb:mmWidth50:mmHeight65:0"

#export QWS_SIZE=320x240

export TSLIB_TSEVENTTYYPE=H3600i

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_PLUGINDIR=/tslib/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/tslib/etc/ts.conf

export set QWS_KEYBOARD="TTY:/dev/tty1"

export set QWS_MOUSE_PROTO=Tslib:/dev/event0

export set QT_PLUGIN_PATH=$QTDIR/plugins/

export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/

export set PATH=$QPEDIR/bin:$PATH

export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/plugins/imageformats:$LD_LIBRARY_PATH

/tslib/bin/ts_calibrate

上电执行

. ./startqt4.5.2.sh

然后就是你的程序了,假设是main

./main -qws &

不加& 就报什么符号错误,烦

3、使用Qt Creator

Qt Creator跨平台,非常好。以前以为不能直接拿来编写板子上的Qt,真是无知。

只要把 tools ->options设置一下即可

uid-22550534-id-387330.html

然后即可创建即可在pc上模拟,又可在arm上跑的项目了

只要在左边的 projects 里选一下即可

阅读(1027) | 评论(0) | 转发(0) |

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐