开发模式:
在宿主机Federa上通过qvfb来模拟帧缓冲
开发完毕后使用qt-embedded重新编译后下载程序到ARM上运行(ARM上需要安装Qt)
开发所需软件:
- qtopia-free-1.7.0.tar.gz
- qt-x11-2.3.2.tar.gz
- tmake-1.11.tar.gz
- qt-embedded-2.3.7.tar.gz
配置时设置qvfb: ./configure -qconfig -qvfb -depths 4,8,16,32
程序的运行方式: ./qvfb &
./canvas –qws (一般调试时采用这种方式)
注意:QT默认显示窗口大小为240x320像素,指定其他窗口大小:qvfb -width 640 -height 480 &
如果需要将自己开发的安装在Qtopia中,则需要以下的步骤:
1. 在/x86-qtopia目录下建立文件夹hello,并编写相应的程序,执行:
make
编译完后程序生成在$QPEDIR/bin下
2. 设置配置文件hello.desktop并复制配置文件到$PEDIR/apps/Applications下:
配置文件内容:
[Desktop Entry]
Comment=An Hello Demo.
Exec=hello
Icon=Hello
Type=Application
Name=Hello
执行命令:
cp hello.desktop $PEDIR/apps/Applications
3. 执行程序:
qvfb &
qpe
4. 修改图标:
设计32*32的PNG图片放到<Qtopia>/pics/inline目录下,然后用qembed转换
qembed -images $QPEIDR/pics/inline/*.* > $QPEIDR/src/librabies/qtopia/inlinepics_p.h
宿主机Qt的安装
***********************************************************************************************
注:以下安装步骤在Redhat 9系统下测试通过,安装步骤参考了MagicARM2410平台实验手册。
在/zylinux下建立目录 x86-qtopia 所有的软件包都复制到该目录下
***********************************************************************************************
1.安装tmake
tar xzvf tmake-1.11.tar.gz
export TMAKEDIR=/zylinux/x86-qtopia/tmake-1.11
export TMAKEPATH=/zylinux/x86-qtopia/tmake-1.11/lib/qws/linux-x86-g++
export PATH=$PATH:/zylinux/x86-qtopia/tmake-1.11/bin/
Tmake配置文件:Tmake.conf
Tmake的模板:app.t 用于生成应用程序的Makefile
lib.t 用于生成库文件的Makefile
subdirs.t 用于创建编译子目录中程序的Makefile
2.安装Qt/X11
tar xzvf qt-x11-2.3.2.tar.gz
cd qt-2.3.2/
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -static -no-xft -no-opengl
make
make -C tools/qvfb
mv tools/qvfb/qvfb bin
export QTEDIR=$QTDIR
cp bin/uic $QTEDIR/bin
cd ..
Qt的配置比较复杂 详细查看./configure --help
make -C tools/designer 图形设计器designer
3.解压Qtopia
tar xzvf qtopia-free-1.7.0.tar.gz
export QPEDIR=$PWD/qtopia
4.安装Qt/Embeded
这里使用了QPE的配置文件
tar xzvf qt-embedded-2.3.7.tar.gz
cd qt-2.3.7
export QTDIR=$PWD
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools
(echo yes; echo yes)|./configure -platform linux-x86-g++ -qconfig qpe -qvfb -depths 4,8,16,32
make sub-src //make -C src
cd ..
5.安装Qtopia
cd qtopia-1.7.0
export QTDIR=$QTEDIR
export QPEDIR=$PWD
export PATH=$QTEDIR/bin:$PATH
cd src
./configure -platform linux-x86-g++
make
cd ../..
***********************************************************************************************
***********************************************************************************************
配置脚本(以上5步的完整安装,所有需要文件放在/zylinux/x86-qtopia下,执行./build):
#!/bin/bash
echo remove old dirs
rm -rf tmake
rm -rf qt
rm -rf qt-x11
rm -rf qtopia
echo Unpack all packages
tar xzvf tmake-1.11.tar.gz
tar xzvf qt-embedded-2.3.7.tar.gz
tar xzvf qt-x11-2.3.2.tar.gz
tar xzvf qtopia-free-1.7.0.tar.gz
echo rename
mv tmake-1.11 tmake
mv qtopia-free-1.7.0 qtopia
mv qt-2.3.7 qt
echo Start Install Qt-X11
cd qt-2.3.2
export QTDIR=$PWD
echo yes|./configure -static -no-xft -no-opengl -no-sm
make -C src/moc
cp src/moc/moc bin
make -C src
make -C tools/designer
make -C tools/qvfb
cp tools/qvfb/qvfb bin
strip bin/uic bin/moc bin/designer bin/qvfb
#cp bin/uic $QTEDIR/bin
cp bin/?* ../qt/bin
cd ..
#cp $QTDIR/bin/?* qt/bin
mv qt-2.3.2 qt-x11
echo Start Setting env-var
export QTDIR=$PWD/qt
export QTEDIR=$QTDIR
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
echo Start build Qt/Embedded
cd qt
make clean
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools
(echo yes; echo yes)|./configure -platform linux-generic-g++ -qconfig qpe -qvfb -depths 16,24,32
make -C src
cd ..
echo Start Build Qtopia
cd qtopia/src
./configure -platform linux-generic-g++
make
echo OK
这样安装完后的安置路径为:
qt-embedded-2.3.7.tar.gz /zylinux/x86-qtopia/qt
qtopia-free-1.7.0.tar.gz /zylinux/x86-qtopia/qtopia
qt-x11-2.3.2.tar.gz /zylinux/x86-qtopia/qt-x11
tmake-1.11.tar.gz /zylinux/x86-qtopia/tmake
***********************************************************************************************
***********************************************************************************************
安装完毕,开发前需要导出环境变量:
export QTDIR=$PWD/qt
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
***********************************************************************************************
***********************************************************************************************
注:如果运行时找不到某些库,则需要设置库路径:
在/etc/ld.so.conf文件中增加Qt库的路径
/zylinux/x86-qtopia/lib
/zylinux/x86-qtopia/qtopia/lib
添加完路径后,在/etc目录下以root身份执行ldconfig使Qt的库生效。
注:undefined reference to vtable for "xxx::xxx"解决方法
某一个类中如果加入Q_OBJECT后, 则link时提示:undefined reference to vtable for "xxx::xxx".删掉它则没有任何问题.
解决:因为qmake生成Makefile的时候,这个类的头文件中并没有Q_OBJECT,所以在相应的Makefile里面并没有用moc xxx.h命令,最终导致链接失败.重新运行qmake,问题解决.在查找解决方法的时候,附带发现一点:qmake 不会处理.cpp文件里的Q_OBJECT,所以,如果在.cpp文件中有它的话,也会产生undefined reference to vtable for "xxx::xxx". 这时,需要先用moc xxxx.cpp生成相应的moc文件,再包含到.cpp里面去,才能解决这个问题.