1、1,Qtopia集成开发环境搭建,第一章,本章内容,QT、QTopia、QPE之间的关系安装jpeg库、KDevlope集成开发环境,3,Qt概念,Qt是挪威Trolltech公司的旗舰产品,作为跨平台开发框架,是开源KDE桌面的基石.Google Earch,Skype,Opera,Adobe Photoshop Element等著名软件都是基于Qt编写的.目前Qt最新版本为4.3.4和java的”一次编写到处运行”所不同的是,Qt是源代码级的跨平台一次编写到处编译.一次开发的Qt应用程序可以移值到不同平台.目前Qt支持的平台有:Mac,Windows NT/2000/XP/Vista,un
2、ix,linux,嵌入式linux,Qt和Qtopia之间关系,Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。 Qt/E(Qt/Embedded)是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。Qtopia是一个构建于Qt/E之上的类似桌面系统的应用环境。相比之下,Qt/E是基础类库。Q
3、topia Core:就是原来的Qt/E,大概从Qt 4开始改名,把Qtopia Core并到Qtopia的产品线中去了。但实际上Qtopia Core就相当于原来的Qt/E,仍然作为基础类库。,Qtpioa安装,从网站上下载的qt文件qtopia-2.2.0.tar.gz,拷贝到一个单独目录中.推荐放在opt目录下单独解压.tar -zxvf qtopia-2.2.0.tar.gz建立两个目录arm_qtopia和x86_qtopia目录把源码分别解压到两个目录中,后面我们会对其分别编译出x86仿真版和arm交叉编译版本qtpioa安装之前需要下载3个补丁包并安装后才能正确编译,6,安装Qt
4、 续,编译Qt库,并且连编实例程序、教程和工具(比如Qt设计器),就像下面这样。 在解压目录中输入 ./configure -qte -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -qt-zlib -qt-libpng -gif -no-g+-exceptions -no-qvfb -xplatform linux-arm-g+ -tslib -qpe edition pda -displaysize 240x320 -fontfamilies helvetica fixed micro smallsmooth smooth
5、times unifont -xplatform linux-arm-g+ -luuid -qt2 -no-opengl -no-xft -dqt -no-xft -thread该命令会自动检测你目前linux操作系统具体配置情况执行make命令生成qt和qtopia。执行make install系统会把编译好的所有库文件拷贝到$QPEDIR/image目录下在你主机中创建如下脚本文件中设置一些环境变量如下:export QTDIR=/opt/qte/arm_qtopia/qtopia2.2.0/qt2 export PATH=$QTDIR/bin:$PATH export QPEDIR =
6、/opt/qte/arm_qtopia/qtopia2.2.0/qtopiaexport QMAKESPEC= $QPEDIR/mkspecs/qws/linux-arm-g+export HOME=opt/qte/arm_qtopia/qtopia2.2.0/image/rootexport LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH,7,几个有关qt环境变量,QMAKESPEC:这个必须设置为你所使用的系统的平台和编译器的组合。举例来说,加入你使用的是Windows和Microsoft Visual Studio,你应该把
7、环境变量设置为win32-msvc。如果你使用Solaris和g+,你应该把环境变量设置solaris-g+。QTDIR:这个必须设置到Qt被(或者将被)安装到的地方。比如,/opt/qte/arm_qtopia/qtopia2.2.0/qt2一旦环境变量被设置到qmake目录,$QTDIR/qmakeQPEDIR:这设置为Qtopia的实际安装目录,8,Qt主要开发工具,Kdevelopt IDEKDelvelopt 是Linux下开源IDE,目前最新版本为3.5.3,它的优点是专门为linux下编写c+的开发工具有速度快易调试等特点.但是没有代码职能感知功能Eclipse + C+Deve
8、lopt Tool(CDT)+qt插件Eclipse是java开发的IDE工具.它能够通过插件方式支持多种语言如:c+,java,c.要运行Eclipse必须先安装jre.具有代码智能感知功能Qdevelopt IDE QDevelop是专门用于Qt4开发的IDE环境。QDevelop基于Qt4核心,需要安装gcc编译器(windows为MinGW),还需要gdb提供调试功能和ctags实现代码补全功能。QDevelop目前支持英语、法语、德语、荷兰语、波兰语、西班牙语、中文、俄语、意大利语和乌克兰语。QDevelop是和Kdevelop无关的项目。它主要专注于提供Qt的IDE开发环境。虽然还
9、不完善,但是发展很快,并且跨平台。QDevelop和KDevelop具有完全不同的源代码。,9,Qt体系架构,Qt的整个设计都是以单根继承为主这跟java相同.所谓单根继承就是说所有的Qt类都有一个共同的祖先都是QObject类QObject类后面有三个大的子类分别负责不同的功能它们是:QApplicaton:类管理图形用户界面应用程序和控制台程序的控制流和主要设置 QWidget:是所有用户界面对象的基类,负责管理图形界面 QLayout:负责管理所有图形界面的摆放方式,10,qmake工程文件,工程文件里包含了qmake建立你的应用程序(或者库,插件)所需要的所有信息。你的工程所需的资源通
10、常通过一系列的声明语句来描述,而简单的控制结构,可以实现在不同的平台和环境下,执行不同的编译流程。qmake工程文件是以.pro为扩展名,11,qmake概述,qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。 手写 Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake会注意所有的编译器和平台的依赖性,可以把开发者解放出来只关心他们的代码。 Trolltech公司使用qmake作为Qt库和Qt所提供的工具的主要连编工具.当Qt被连编的时候,默认情况下qmake也会被连编。qmake使用储存在
11、项目(.pro)文件中的信息来决定Makefile文件中该生成什么。,12,qmake工程文件样列,TEMPLATE = appTARGET =Hello world DEPENDPATH += .、INCLUDEPATH += .SOURCES += hello.cppHEADERS+ = hello.hFORMS += charGame.ui test_dynmaic.uiCONFIG += qt warn_on releaseCONFIG += qt debugCONFIG+= qt thread debug,13,pro文件解释,TEMPLATE: 表示最终生成得目标文件类型app表示
12、,最终生成得可执行文件TARGET:目标名称是自动设置的,它被设置为和项目文件一样的名称,但是为了适合平台所需要的后缀。DEPENDPATH:应用程序所依赖的搜索路径INCLUDEPATH:应用程序所需的额外的包含路径的列表SOURCES:应用程序得源代码HEADERS:应用程序用到得头文件FORMS:应用程序用到得ui窗体文件CONFIG: 包含Qt连接编译得一些配置信息包括:qt warn_on :编译器会输出尽可能多的警告信息qt warn_off :编译器会输出尽可能少的警告信息qt debug:应用程序将以debug模式连编。qt thread debug :连编为一个可调试的多线程
13、的应用程序,14,Qt2包含的模块,QtCore 和图形无关的核心模块QtGui 所有的图形模块QtNetWork 网络相关的模块QtOpenGL 支持OpenGL QtSql QT支持数据库开发模块QtSvg定义和生成SVG类QtXML读取XML文件模块QtDesignerQt的图形界面设计QtUiTool定义在应用程序中直接处理ui文件的类Qt3Support Qt3版本的支持QtAssistant 定义和扩展Qt设计器的类,15,qmake命令,Qmake可以根据实际文件自动生成相对应makefile文件.命令格式: qmake options files,16,Qt体系架构图,qmak
14、e编译qt次序,首先使用qmake project选项命令,根据当前源代码生成后缀名为pro的工程文件其次再次调用qmake 命令或者执行qmake o Makefile helloworld.pro自动生成Makefile文件,Qtopia添加线程支持,由于qtopia 2.2.0的makefile里的问题,现在只能自己手动编译出支持thread的libqte-mt.so.进入qtopia-2.2.0-FriendlyARM/qt2目录手动配置来支持multi-thread:如果编译的是x86版本那么执行./configure -embedded -no-xft -qconfig qpe -
15、depths 16,32 -system-jpeg -gif -thread 如果编译的是arm版本那么执行./configure -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -qt-zlib -qt-libpng -gif -no-g+-exceptions -no-qvfb -xplatform linux-arm-g+ -tslib -thread上面的步骤执行后会在当前目录下产生src-mt.mk文件,用编辑器将其内容的最后一行”cd src; $(MAKE) clean“删除或注释掉编译libqte-mt:make src-mt编译完成后将在qtopia-2.2.0- FriendlyARM/qtopia/lib目录下生成所期待的libqte-mt.so.*文件。,19,第一个程序 Hello world,#include #include Int main(int argc,char *argv)QApplication a( argc, argv ); QWidgtet widget;widget.resize( 100, 300 ); widget.show(); return a.exec(); ,