配置qtopia-free-2.1.1 桌面开发环境
这篇文章主要介绍了如何编译qtopia-free-2.1.1 ,以及运用QVFB搭建桌面开发环境。
编译qtopia-free-2.1.1
编译前准备!
qt-embedded-free-3.3.4.tar
qt-embedded-2.3.10-free.tar
qt-x11-2.3.2.tar
qtopia-free-source-2.1.1.tar
tmake-1.13.tar.gz
开始编译!
然后严格按照以下顺序编译
(参考资料:qtopia-free-2.1.1自带的文档中的Building Qtopia from Source 一章)
Build Qt 3.3 + tools
To build Qt 3.3 and the tools you must do the following:
· cd $DQTDIR (这里漏掉一步,先设置export DQTDIR=$(QT3.3的目录路径))
· export QTDIR=$DQTDIR
· export PATH=$QTDIR/bin:$PATH
· export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
· echo yes | ./configure -fast -thread
· make sub-src
· cd tools/linguist/lrelease
· make
· cd ../lupdate
· make
· cd ../../designer/uilib
· make
· cd ../uic
· Make
Build Qt 2.3.2
To build Qt 2.3.2 you must do the following:
· cd $QT2DIR(这里漏掉一步,先设置export QT2DIR =$(QT2.3.2的目录路径))
· export TMAKEPATH=$TMAKEDIR/lib/linux-g++
· export QTDIR=$QT2DIR
· export PATH=$QTDIR/bin:$PATH
· export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
· ./configure -no-xft
· make
· mkdir $QTEDIR/bin
· cp bin/uic $QTEDIR/bin/
Build QVfb
(注:关于QVFB嵌入式的虚拟帧缓冲的介绍,看本文后面)
In this step we build and link the qvfb sources from Qt 2.3.10 against the static Qt library from Qt 2.3.2.
· export TMAKEPATH=$TMAKEDIR/lib/linux-g++
· export QTDIR=$QT2DIR
· export PATH=$QTDIR/bin:$PATH
· export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
· cd $QTEDIR/tools/qvfb
· tmake -o Makefile qvfb.pro
· make
· mv qvfb $QTEDIR/bin/
Build Qt/Embedded
If you are using the Qtopia Tools package then first
export LD_LIBRARY_PATH=$QT2DIR/lib:$LD_LIBRARY_PATH
cp $QT2DIR/bin/qvfb $QTEDIR/bin/
cp $QT2DIR/bin/uic $QTEDIR/bin/
To build Qt/Embedded you must do the following:
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
./configure -system-jpeg -no-xft -qconfig qpe -keypad-mode -qvfb -depths 4,8,16,32 [extra options: see below]
make sub-src
(注:这两步很关键
第一步的意思是把qtopia的配置信息拷贝到QT/Embedded因为根据实际应用的不同,QT/Embedded需要的功能也不同,所以qconfig-qpe.h实际上对于QT/Embedded来说,是一份裁减列表,告诉什么要裁减,什么不要裁减,具体的详细信息见qconfig-qpe.h里面有详细的英文注释。
第二步的参数-qconfig qpe的意思Qt/Embedded根据qconfig-qpe.h来进行裁减配置,并最后编译)
我的qconfig-qpe.h的内容如下:(就一行)
#define QT_NO_PROPERTIES
我的意思就是(除了‘属性’这个特征以外,其他所有功能全部都需要)
属性-à Qt提供了一套和一些编译器提供商也提供的属性系统类似的完善的属性系统。
http://www.qiliang.net/qt/properties.html 中有对属性这个特征的的详细说明
Build Qtopia
To build Qtopia phone you must do the following:
· cd $QPEDIR
· export QTDIR=$QTEDIR
· export PATH=$QPEDIR/bin:$PATH
· ./configure -edition phone -no-qtopiadesktop
· make
· make install
To make the PDA version you must do the following:
cd $QPEDIR
export QTDIR=$QTEDIR 1
export PATH=$QPEDIR/bin:$PATH 2
./configure -edition pda -no-qtopiadesktop 3
make 4
make install 5
(注:我们这里只编译PDA版本,在第3步的时候加上参数-prefix 路径名 , 到第5步的时候就会自动安装到那个路径下)
至此,整个qtopia2.1.1编译成功!
编译完毕,执行程序!
执行程序时的环境变量
QPEDIR=/home/snail/devel/qt/environment/qtopia(我编译qtopia的时候,指定安装路径就是/home/snail/devel/qt/environment/qtopia)
QT2DIR=/home/snail/devel/qt/environment/qt-2.3.2
QTDIR=/home/snail/devel/qt/environment/qtopia
QTEDIR=/home/snail/devel/qt/environment/qt-2.3.10
QWS_DISPLAY=QVFb:0
执行程序
$QTEDIR/bin/qvfb -nocursor -width 800 -height 480 &
$QPEDIR/bin/qpe
最后效果图如下
Qt/嵌入式的虚拟帧缓冲
虚拟帧缓冲允许在你的桌面机器上开发Qt/嵌入式程序,而不用在命令台和X11之间来回切换。
The virtual framebuffer is located in $QTDIR/tools/qvfb.
使用虚拟帧缓冲
1. 确认$QTDIR/src/tools/qconfig.h中的QT_NO_QWS_VFB是没有被定义的,并且编译Qt/Embedded库。
2. 把qvfb作为一个普通的Qt/X11应用程序来编译并且运行它。不要把它作为一个Qt/嵌入式应用程序来编译。
3. 启动一个Qt/嵌入式主程序(比如,使用QApplication::GuiServer标志来构造一个QApplication或者在命令行下使用-qws参数)。你将会需要指定你所要使用虚拟帧缓冲驱动的服务器,例如:
4. widgets -qws -display QVFb:0
5. 你也可以设置QWS_DISPLAY环境变量为QVFb:0。
(注:如果不设置QWS_DISPLAY环境变量为QVFb:0,在启动的时候也没有加上-qwsdisplay :id,则可能出现找不到QVFB的错误)
qvfb支持下列命令行参数:
- -width width
虚拟帧缓冲的宽度(默认:240)。
- -height height
虚拟帧缓冲的高度(默认:320)。
- -depth depth
虚拟帧缓冲的色深(1、8或者32,默认:8)。
- -nocursor
在帧缓冲窗口不显示X11光标。
- -qwsdisplay :id
提供的Qt/嵌入式显示id(默认:0)。
(注:启动QVFB 时候后面加上&,这样QVFB就以后台程序运行,这样就可以在同一终端上继续运行qtopia程序~)
虚拟帧缓冲设计
虚拟帧缓冲使用了共享存储区域(虚拟的帧缓冲)来模拟帧缓冲并且在一个窗口中(qvfb)模拟一个应用来显示帧缓冲。显示的区域被周期性的改变和更新,所以你会看到帧缓冲的不连续的快照,而不是每一个单独的绘画操作。因为这个原因的绘画问题,比如闪烁,知道程序在使用真正的帧缓冲而运行的时候就不会再出现了。
(注:当在QVFB中运行程序时如果出现闪烁或延迟不代表在嵌入式设备中也会出现同样情况)
目标刷新速度可以通过View|Refresh Rate菜单项来设置。这将会倒置qvfb更加频繁地检查要被刷新的区域。速度仅仅是一个目标。如果一个小的绘画操作完成了,帧缓冲将不会在绘画事件之间显示任何更新。如果一个应用程序正在显示一个动画,更新将会更频繁,并且应用程序和qvfb将会争夺处理器时间。
鼠标和键盘事件通过命名管道传递给Qt/嵌入式主程序处理。
虚拟帧缓冲只是一个开发工具。在虚拟帧缓冲设计中没有考虑任何安全问题。在产品环境中应该避免这个问题,QT_NO_QWS_VFB在产品库中应该是被定义的。
(注: 虚拟帧缓冲只是一个开发工具。它的目的仅仅是让你可以方便的调试程序,不用在开发环境上和设备之间来回调试,所以在你还没有运行它之前,不要把它想的很复杂)
参考资料:
http://www.qiliang.net/qt/emb-qvfb.html