Qt.docx
- 文档编号:30693002
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:20
- 大小:53.56KB
Qt.docx
《Qt.docx》由会员分享,可在线阅读,更多相关《Qt.docx(20页珍藏版)》请在冰豆网上搜索。
Qt
Qt/Embedded在嵌入式linux下的开发环境建立及移植
林观康
(广东工业大学自动化学院广州510006)
摘要:
本文主要介绍了在嵌入式linux系统下QT/Embedded开发环境建立及移植。
通过大量源代码及分析,建立起在linux主机和s3c2410下的Qt/开发环境,再对QT/E程序进行移植。
关键词:
Qt/Embedded;嵌入式;linux
引言
Qt/Embedded是奇趣科技推出的基于Linux的嵌入式平台开发工具,是Qt的嵌入式版本。
它继承了Qt的全部标准API,提供了比Xlib和XWindows系统更加紧凑的窗口生成系统,对FrameBuffer直接进行操作(见图1)。
完全模块化的设计和高效的编译系统减少了内存的消耗,这些使Qt/Embedded成为嵌入式环境中,功能强大而全面的GUI开发工具。
由于KDE等项目均使用Qt作为支持库,所以许多基于Qt的XWindows程序可以非常方便地移植到Qt/Embedded版本上。
Qt/Embedded具有面向对象、跨平台和界面设计方便美观等优点,已得到了广泛的应用。
本文主要通过大量的源代码,建立起linux主机和s3c2410下的QT/Embedded开发环境,并指出其移植方法。
1.前期准备
本文所用到的宿主机操作系统为REDHAT9.0,目标平台为三星公司的S3c2410。
需要准备的软件包如下:
1)jpegsrc.v6b.tar.gz-安装libjpeg库,因为配置Qt/E支持jpeg时需要jpeglib.h、libjpeg.a、libjpeg.so这三个文件;
2)e2fsprogs.1.35.tar.gz-安装libuuid库,因为交叉编译时需要用到此库;
3)qt-embedded-free-3.3.5.tar.gz-编写嵌入式图形界面所需的软件包;
4)qt-x11-3.3.4.tar.gz-编写嵌入式图形界面所需的软件包。
2.Qt/E开发环境的建立
2.1Jpeg6b的安装与配置
Jpeg6b的安装和配置比较简单,过程如下:
#cd/usr/src
#tarxzvfjpegsrc.v6b.tar.gz//解压
#cdjpeg-6b
#./configure–enable-shared–enable-static//配置,既生成静态又生成共享库文件
#make
#cd/usr/local
#mkdirman//注意建立man和man1文件夹
#cdman
#mkdirman1
#cd/usr/src/jpeg-6b
#makeinstall//编译并安装
完成后会在/usr/include目录下生成jpeglib.h,在/usr/local/lib目录下会生成libjpeg.a和libjpeg.so两个库文件,如果没有则说明安装不成功。
2.2安装并交叉编译arm的libuuid库
#cd/usr/src
#tarxvzfe2fsprogs-1.35.tar.gz//解压
#cde2fsprogs-1.35
#./configure-host=arm-linux-with-cc=arm-linux-gcc-with-linker=arm-linux-ld-enable-elf-shlibs-prefix=/usr/local/arm/2.95.3/arm-linux
//配置生成基于ARM平台的libuuid库文件
#makeinstall//编译并安装
#cdlib
#cp–dRlibuuid.*/usr/local/arm/2.95.3/arm-linux/lib//将生成的库文件拷到ARM交叉编译工具链所在的lib目录。
将交叉编译后生成的libuuid库拷到arm的交叉编译工具链目录中时应注意检查生成的libuuid.so、libuuid.so.1、libuuid.so.1.2是不是arm交叉编译完成的(filelibuudi.so.1.2如果显示为:
ELF32-bitLSBSshared,ARM,Version1(ARM),notstripped则表示正确)。
2.3安装Qt/X11
#cd/usr/local
#tarxvfzqt-x11-free-3.3.4.tar.gz
#mvqt-x11-free-3.3.4qtx
#cdqtx
#exportQTDIR=$PWD//设置环境变量,在编译的时候要用到
#exportPATH=$QTDIR/bin:
$PATH
#exportLD_LIBRARY_PATH=$QTDIR/lib
#./configure-depths4,8,16-no-ipv6-no-cups-no-pch–qvfb-depths4,8,16,32//配置,可以通过./configure-help来获得帮助信息
#make//编译
#makeinstall
2.4安装Qt/Embedded
编译并安装Qt/Embedded主要是为了生成基于ARM内核的Qt/E库文件,将这些库文件移植到ARM平台中就可以运行通过QT开发出来的GUI程序了,下面列出其安装步骤:
#cd/usr/local
#tarxvzfqt-embedded-free-3.3.5.tar.gz
#mvqt-embedded-free-3.3.5qte
#cdqte
#exportQTDIR=$PWD//设置环境变量
#exportPATH=$QTDIR/bin:
$PATH
#exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
接着拷贝jpeg库头文件到Qt/E的include中,因为在编译的时候要用到:
#cp/usr/include/jpeglib.h$QTDIR/include/
#cp/usr/include/jconfig.h$QTDIR/include/
#cp/usr/include/jerror.h$QTDIR/include/
#cp/usr/include/jmorecfg.h$QTDIR/include/
#cp/usr/local/qtx/bin/uic$QTDIR/bin/
#./configure-shared-embeddedarm-qt-gif-no-exceptions-thread-no-nis-no-cups-no-stl-qt-imgfmt-mng-qt-imgfmt-png-qt-imgfmt-jpeg-qt-sql-sqlite-qvfb-depths4,8,16,32
#make//编译,最终生成基于ARM平台的Qt/E库文件:
libqte-mt.so、libqte-mt.so.3、libqte-mt.so.3.3、libqte-mt.so.3.3.5
到此,整个Qt/Embedded的开发环境全部建立起来了。
3.Qt/Embedded在硬件平台上的移植
Qt/E移植主要是将交叉编译Qt/E时生成的库文件移植到目标板的文件系统中:
#cd/home/root//root为我们存放文件系统的目录
#mkdirqt
#cdqt
#mkdirlib
#mkdirbin
#cp-dR$QTEDIR/lib/libqte-mt.*.///将编译Qt/E生成的库文件拷到lib目录中,在这里主要是用到lib中的4个文件:
libqte-mt.so、libqte-mt.so.3、libqte-mt.so.3.3、libqte-mt.so.3.3.5
最后我们通过NFS将生成的文件系统加载到硬件目标平台上。
4.开发流程
整个开发环境建立起来后,开发流程如下:
1)先在宿主机调用QTX下的designer工具,建立工程文件,编写程序并调试(例如建立hello.pro)
2)确认程序无误后,调用QTE下的qmake对工程文件进行交叉编译
/usr/local/qte/bin/qmakehello.pro;make;
3)把交叉编译生成的二进制执行文件放到目标板的文件系统中
cphello/home/root/qt/bin
4)在目标板上运行
#exportQTDIR=/qt
#exportPATH=$QTDIR/bin:
$PATH
#exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
Hello–qws
5.总结
本文主要讲述了Qt/Embedded开发环境的建立和移植,本文主要介绍了在嵌入式linux系统下QT/Embedded开发环境建立及移植。
通过大量源代码及分析,建立起在linux主机和s3c2410下的Qt/E开发环境,再对Qt/E程序进行移植,文章最后还指出QT程序的开发流程。
参考文献
[1]BlanchetteJ.C++GUIProgrammingwithQt3[Z].TrolltechAS.2004.
[2]Trolltech.QtReferencedocumentationversion31314[Z].2004.
[3]刘泽建,嵌入式水文信息采集智能终端的研究与设计,广东工业大学学位论文[M].2003
摘要:
QT是一个用于多种平台图形界面程序开发的C++工具包。
同时QT还包含了一些工具使得编写程序变得又快又直接。
QT的跨平台能力和国际化支持保证了QT应用程序占有尽可能广阔的市场。
Qt/Embedded是面向嵌入式系统的QT版本。
主要讲述Qt/Embedded库中基于ARM的嵌入式Linux系统下的移植,同时使用一个简单的应用程序来说明Qt/Embedded应用程序的开发流程。
关键词:
QT;Qt/Embedded;交叉编译;ARM
QT是Trolltech公司开发的一个多平台的C++图形用户界面应用程序框架。
Qt采用了完全面向对象组件编程技术,支持多平台。
Qt提供图形用户界面在嵌入式系统上开发的一系列开发工具包。
该图形系统最大的优点是采用面向对象设计,移植性好,基于XWindow的Qt桌面应用程序可以非常方便的移植到嵌入式系统上。
Qt/Embedded是在嵌入式环境下所使用的Qt。
目前市面上所有上市的LinuxPDA都是采用Qt/Embedded作为图形接口的函数库。
Qt/Embedded的特性是可以直接在Framebuffer上显示图形接口,反应的速度更快,这对硬件和容量都有限制的嵌入式环境非常重要。
主要介绍QT在基于ARM的嵌入式Linux系统下的移植与应用。
1Qt/Embedded开发环境介绍
Qt/Embedded应用程序的开发可以在安装了一个跨平台开发工具链的不同的平台上编译。
系统采用的是在Linux平台下开发,在Linux平台下以虚拟缓冲帧的方式来运行,其实是有一个X11的应用程序虚拟了一个缓冲帧。
通过指定显示设备的宽度、高度和颜色深度,虚拟出来的缓冲帧将和物理的显示设备在每个像素上保持一致。
这样每次调试应用时开发人员就不用总是刷新嵌入式设备的FLASH存储空间,从而加速了应用的编译、链接和运行周期。
运行Qt的虚拟缓冲帧工具的方法是:
在Linux的图形模式下运行命令:
qvfb(回车)
当Qt嵌入式的应用程序要把显示结果输出到虚拟缓冲帧时,我们在命令行运行这个程序时,在程序名后加上-qws的选项。
例如:
$>hello-qws
Qt包含了许多支持嵌入式系统开发的工具,其中一些工具我们会在别的地方介绍。
最实用的工具(除了上面我们提到的虚拟缓冲帧)有tmake、Qtdesigner(图形设计器)、uic和moc。
(1)tmake
tmake是一个为编译Qt/Embedded库和应用而提供的Makefile生成器。
它能够根据一个工程文件(.pro)产生不同平台下的Makefile文件。
开发者可以使用Qt图形设计器可视化地设计对话框而不需编写一行代码。
使用Qt图形设计器的布局管理可以生成具有平滑改变尺寸的对话框,tmake和Qt图形设计器是完全集成在一起的。
(2)Qtdesigner
QtDesigner是设计窗口组件(Widget)的应用程序,在安装Qt的bin目录下输入./designer命令,就启动一个包含很多Qt组件的可视化界面。
在此组织应用程序的各组建分布很方便,最后生成一个file.ui和main.cpp文件;file.ui是用XML语言编写的一个文本。
(3)uic(userinterfacecompiler)
uic是从XML文件生成代码的用户界面编译器,用来将file.ui文件生成file.h和file.cpp文件(命令如:
uic-ofile.hfile.uiuic-ofile.cppfile.ui),但生成的这两个文件不是标准的纯C++代码,通常称为Qt的C++扩展,因为Qt的对象间运用了信号和插槽的通信机制,在文件中用Q_OBJECT宏来标识。
(4)moc(元对象编译器)
moc用来解析一个C++文件中的类声明并且生成初始化对象的C++代码,moc在读取C++源文件,如果发现其中一个或多个类的声明中含有Q_OBJECT宏,就给出这个使用Q_OBJECT宏的类生成另外一个包含元对象代码的C++元文件;元对象代码对信号插槽机制、运行时的类型信息和动态属性系统是需要的。
2Qt/Embedded库的移植
2.1Qt/Embedded开发环境的安装[1]
一般来说,嵌入式应用程序都是先在装有Linux操作系统的PC机或工作站来完成Qt/Embedded的开发,然后再把应用程序交叉编译后发布到嵌入式Linux系统下。
在一台装有Linux操作系统的机器上建立Qt/Embedded开发环境,需要三个软件安装包:
tmake工具安装包,Qt/Embedded安装包,Qt的X11版安装包。
由于上述软件安装包有许多不同版本,要注意版本不同可能导致的冲突。
QtforX11安装包的版本要比Qt/Embedded的版本旧。
因为QtforX11安装包的两个工具uic和designer产生的源文件会和Qt/Embedded的库一起被编译链接,本着“向前兼容”的原则,QtforX11的版本应比Qt/Embedded的版本旧。
本系统采用的是tmake1.11;Qt/Embedded2.3.7;Qt2.3.2forX11。
2.1.1安装tmake
在Linux命令模式下运行以下命令:
#tarxfztmake-1.11.tar.gz
#exportTMAKEDIR=$PWD/tmake-1.11
#exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
#exportPATH=$TMAKEDIR/bin:
$PATH
2.1.2安装Qt/Embedded2.3.7
在Linux命令模式下运行以下命令:
#tarxfzqt-embedded-2.3.7.tar.gz
#cdqt-2.3.7
#exportQTDIR=$PWD
#exportQTEDIR=$QTDIR
#exportPATH=$QTDIR/bin:
$PATH
#exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
#./configure-qconfig-qvfb-depths4,8,16,32
#makesub-src
上述命令./configure-qconfig-qvfb-depths4,8,16,32指定Qt嵌入式开发包生成虚拟缓冲帧工具qvfb,并支持4,8,16,32位的显示颜色深度。
另外我们也可以在configure的参数中添加-system-jpeg和gif,使Qt/Embedded平台能够支持jpeg、gif格式的图形。
2.1.3安装Qt/X112.3.2
在Linux命令模式下运行以下命令:
#tarxfzqt-x11-2.3.2.tar.gz
#cdqt-2.3.2
#exportQTDIR=$PWD
#exportPATH=$QTDIR/bin:
$PATH
#exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
#./configure-no-opengl
#make
#make-Ctools/qvfb
#maketools/qvfb/qvfbbin
#cpbin/uic$QTEDIR/bin
根据开发者本身的开发环境,可以在configure的参数中添加别的参数,比如,-no-opengl或-no-xfs,可以通过输入./configure-help来获得一些帮助信息。
2.2交叉编译Qt/Embedded的库[2-3]
Qt/Embedded应用程序最终是要在嵌入式Linux系统下运行,所以要把Qt嵌入式应用程序编译成支持在开发板上运行的目标代码之前,需要两样东西,一是基于目标板的交叉编译器,另一个是交叉编译后的Qt/Embedded库。
2.2.1安装交叉编译工具
交叉编译是指一个处理器平台上编译产生一个工程代码的另一个处理器的目标代码。
通过下载并修改toolchain作为交叉编译工具,要求最好使用cross-3.3.2及其以后的版本,这样才能对Qt/Embedded有良好支持。
2.2.2交叉编译Qt/Embedded库
当有了ARM的linux编译器后,就可以使用这个编译器进行交叉编译Qt/Embedded库的源代码,从而产生一个以ARM为目标代码的Qt/Embedded库。
具体过程如下:
(1)解压Qt/Embedded
在Linux命令模式下运行如下命令:
#tarxfzqt-embedded-2.3.7.tar.gz
(2)配置Qt/Embedded的安装
#cdqt-2.3.7
#exportQTDIR=$PWD
#exportQTEDIR=$QTDIR
#.cp/配置文件所在路径/qconfig-local.h./src/tools
#makeclean
#./configure-xplatformlinux-arm-g++-shared-debug
-qconfiglocal-qvfb-depths4,8,16,32
#make
Qt/Embedded的安装选项有很多个,可以直接输入“”来运行配置。
Qt/Embedded的安装选项还允许自己定制一个配置文件,来有选择的编译Qt/Embedded库,这个安装选项是“-qconfiglocal”;当指定这个选项时,Qt/Embedded库中安装过程会寻找qt-2.3.7/src/tools/qconfig-local.h这个文件来编译链接Qt/Embedded库。
在定制中添加了对触摸屏显示的支持。
2.3Qt/Embedded支持触摸屏显示[4][5]
Qt/Embedded2.x系列中,触摸屏设备和键盘设备需要根据具体的驱动程序接口中Qt/Embedded中设备实现对应的设备操作类。
其中对应于鼠标类设备的实现位于src/kernel/qwsmouse_qws.cpp中。
在文件qwsmouse_qws.cpp中添加对触摸屏的支持。
具体修改如下:
(1)定义和Linux内核文件driver/input/tsdev.c中数据结构ts_event相一致的TS_EVENT数据结构,定义如下:
#ifdefined(QT_QWS_IPAQ)
typedefstruct{
shortpressure;
shortx;
shorty;
shortmillisecs;
}TS_EVENT;
(2)修改校准文件的位置
在函数voidQCalibratedMouseHandler:
:
writeCalibration()和
voidQCalibratedMouseHandler:
:
readCalibration()中修改如下:
QstringcalFile=“/tmp/pointercal”;
(3)对打开的设备文件进行修改
在函数QTPanelHandlerPrivate:
:
QTPanelHandlerPrivate中,修改如下:
mouseFD=open(“/dev/input/ts0”,O_RDONLY|O_NDELAY);
(4)由于内核TS_EVENT结构中,当触摸屏按下时对pressure的设置为1,因此在voidQTPanelHandlerPrivate:
:
readMouseData()函数中把
if(data->pressure>=QT_QWS_TP_PRESSURE_THRESHOLD)
修改为:
if(data->pressure)
2.4移植Qt/Embedded库
在ARM板的根文件系统的tmp目录下创建新目录qt,在qt目录下创建新目录lib。
把交叉编译后生成的Qt/Embedded库拷贝到ARM板上的根文件系统下的/tmp/qt/lib目录下。
在使用QT库之前要设置环境变量。
命令如下:
#exportQTDIR=/tmp/qt
#exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
这样Qt/Embedded应用程序就可以在ARM板上移植了。
3Qt/Embedded应用程序的开发
开发一个Qt应用程序的流程如下[6]:
3.1生成一个工程文件(.pro文件)
一个应用通常对应一个工程文件,生成一个工程文件,并对它做一些简单的编辑,然后使用一个专门的工具(例如tmake)处理这个工程文件,就可以生成一个Makefile文件。
产生一个工程文件的其中一个方法是使用progen命令(progen程序可以在tmake的安装路径下找到)。
下面是使用progen产生一个名为hello的工程文件的命令:
progen-tapp.t-ohello.pro
产生的hello.pro工程文件并不完整,开发者还需手动往里添加工程所包含的头文件,源文件等信息。
3.2新建一个窗体
在qt-2.3.2的安装路径的bin目录下运行“./designer”命令,就启动了一个Qt图形编辑器。
点击编辑器的“new”菜单,弹出了一个“newForm”对话框,在这个对话框里我们选择“Widget”,然后点击“OK”按钮,这样我们就新建了一个窗体。
接着,我们可以对这个窗体进行设置。
设置完成后,将其保存为hello.ui文件,这个文件就是project窗体的界面存储文件。
3.3生成窗体类的头文件和实现文件
界面文件使用uic工具产生出窗体类的头文件和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qt
![提示](https://static.bdocx.com/images/bang_tan.gif)