手机开发培训教程.doc_第1页
手机开发培训教程.doc_第2页
手机开发培训教程.doc_第3页
手机开发培训教程.doc_第4页
手机开发培训教程.doc_第5页
免费预览已结束,剩余28页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内部公开目 录1概述11.1什么是智能手机?11.1.1概念11.1.2智能手机的操作系统11.2Qt概述11.3Qtopia知识21.4Linux操作系统在手机开发方面的优势42环境搭建52.1VMware简介52.2安装Redhat52.3利用Samba快速共享Windows文件52.4搭建Qtopia环境62.5运行一个小应用63Qt工具介绍和使用133.1概述133.2翻译工具133.2.1译文内容133.2.2翻译过程133.2.3项目文件(.pro)133.2.4Qt Linguist相关的文件143.3qmake143.3.1qmake概念143.3.2QMAKESPEC环境变量143.3.3项目文件(.pro)143.3.4CONFIG变量163.4qmake高级概念173.4.1操作符173.4.2作用域173.4.3变量194Qt编程技术(待完成)214.1Qt对象模型214.2QObject类214.3Qt国际化214.4QMetaObject元对象类214.5进程间的通信214.6窗口部件类214.7Qt风格机制214.8布局类214.9Qt插件214.10Qt模板库215案例(待完成)225.1文本编辑器225.2金山词霸225.3世界时钟225.4计算器225.5秒表225.6我的收藏226手机测试(已完成)236.1测试基础236.1.1软件开发的一般流程236.1.2测试在软件开发中的作用236.1.3测试与开发对应图246.2测试的流程246.2.1制定测试计划246.2.2测试准备246.2.3测试执行246.2.4测试评估246.2.5文档收集246.2.6测试总结报告256.3测试的方法256.3.1正确性测试256.3.2容错性测试256.3.3边界性测试256.3.4性能与效率测试256.3.5易用性测试256.3.6文档测试256.4测试的分类266.5测试相关文档说明266.5.1测试计划266.5.2测试用例276.5.3错误报告276.5.4进度报告296.5.5总结报告297其他说明308参考文献31附录 C+编程规范32第1/3页 1概述1.1 什么是智能手机?1.1.1 概念什么是智能手机?通俗一点就是一个简单的“11”的公式,“掌上电脑手机智能手机”。从广义上说,智能手机除了具备手机的通话功能外,还具备了PDA的大部分功能,特别是个人信息管理以及基于无线数据通信的浏览器和电子邮件功能。智能手机为用户提供了足够的屏幕尺寸和带宽,既方便随身携带,又为软件运行和内容服务提供了广阔的舞台,很多增值业务可以就此展开,如:股票、新闻、天气、交通、商品、应用程序下载、音乐图片下载等等。融合3C(Computer、Communication、Consumer)的智能手机必将成为未来手机发展的新方向。判定一款手机是否为智能手机,并不是看其是否支持MP3、是否支持HTML页面浏览、是否支持外插存储卡等功能,而是看其是否是一款具有操作系统的手机。也就是说,我们要看操作系统的程序扩展性,看其是否可以支持第三方软件安装、应用。1.1.2 智能手机的操作系统现在市场上的智能手机共有四种不同的操作系统,它们分别是:1、Symbian操作系统(UIQ、Series60、Series80、Series90)2、Windows Mobile (Pocket PC、 Smartphone)3、Linux操作系统4、Palm操作系统5、国产研产操作系统1.2 Qt概述Qt是Trolltech公司的产品,Trolltech是挪威的一家软件公司,主要开发两种产品:一种是跨平台应用程序界面框架;另外一种就是提供给做嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备,Trolltech公司网址: /。Qt 是一个多平台的C+图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt 是完全面向对象,很容易进行扩展,并且允许真正的组件编程。1996 年开始,Qt 正式进入商业领域,它成为了全世界范围内数千种成功的应用程序的基础。Qt 同时也是流行的Linux 桌面环境KDE 的基础,注:KDE 是所有主要的Linux 发行版的一个标准组件。Qt 目前支持以下平台:l MS/Windows - 95、98、NT 4.0、ME、XP、2000、2003(新版Qt 兼容.NET)l Unix/X11 Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11 平台l Macintosh - Mac OS Xl Embedded - 有帧缓冲 (frame buffer) 支持 Linux 平台。Qt 有以下几个版本,基中Qt 专业版和企业版是Qt 的商业版本,Qt 自由版是Qt 的非商业版本,可以免费下载。Qt 企业版和Qt 专业版提供给商业软件开发。它们提供传统商业软件发行版并且提供免费升级和技术支持服务。Qt自由版和Qt仅仅为了开发自由和开放源码软件提供的Unix/X11 版本。在Q公共许可证和GNU通用公共许可证下,它是免费的。Qt/嵌入式自由版是Qt为了开发自由软件提供的嵌入式版本。在GNU通用公共许可证下,它是免费的。1.3 Qtopia知识Qtopia 是Trolltech 为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台。Qtopia 的特性第1/30页 窗口操作系统 同步框架 开发环境 本地化支持 游戏和多媒体 PIM应用程序 输入法 个性化选项 工作辅助应用程序 Internet 应用程序 Java 集成 无线支持Trolltech 提供三大Qtopia 版本:Qtopia 手机版、Qtopia PDA 版和Qtopia 消费电子产品平台。Qtopia 手机版Trolltech 面向嵌入式Linux 的Qtopia 手机版 (Qtopia Phone) 是Qtopia 的一个自定义版本,用于内存有限的智能手机和功能手机。它的用户界面可自定义,内存占用量低,手机制造商使用它可以创建令人赞叹的图形用户界面,从而令手机卓越超群。Qtopia 手机版有两个版本:键盘驱动和手写笔驱动。Qtopia PDA 版Qtopia PDA 版Qtopia PDA 是一个强大的平台,专用于基于Linux操作系统的PDA (个人数字助理设备)。许多PDA 都已采用了Qtopia,Qtopia PDA 版已经成了事实上的Linux 标准,它代表了可行的第三种PDA 设计方案。Qtopia PDA 版具有可定制的用户界面,支持多种不同的屏幕尺寸以及横向和纵向布局。Qtopia 消费电子产品平台While Qtopia 手机版和Qtopia PDA 版是针对移动电话和PDA 制造商的统包解决方案,而Qtopia 消费电子产品平台(Qtopia CEP) 则是一套高层次开发平台,适用于那些希望自行设计和开发应用套件的制造商。Qtopia CEP使得制造商能够在形形色色的手写笔和键盘驱动的设备上创建自定义的环境,这些设备包括电视机、Web Pad(无线联网板)、机顶盒以及许多其它基于Linux 的设备等等。Qtopia 产品系列旨在为基于Linux 的消费电子设备提供和创建图形用户界面。它为制造商提供了前所未有的灵活性和众多选择。Qtopia 手机版概述Qtopia 手机版是Trolltech 专门针对移动电话市场推出的Qtopia 版本。Qtopia 手机版和嵌入式Linux 的组合可以创建强大的操作环境,后者仅占用少量内存。Qtopia 手机版提供所有基本的Qtopia 应用程序,以及专用于手机的用户界面。Qtopia 手机版的架构包含四大组件:平台、应用程序、开发环境,以及同步框架。此外,Qtopia 手机版还支持两种类型的用户交互方式:键盘和触控屏。Qtopia 手机版的最初版本中包含一整套应用程序,专门为手机用户界面而定制,并提供一个“主页”屏幕,其中显示时间关键数据,例如未接电话、收到信息以及日历事件。在未来的版本中,Qtopia 手机版将包含更多专用于手机的应用程序,包括信息收发客户程序、SIM 卡管理器和拨号器。Qtopia 手机版的内容手机用户界面:Qtopia 手机版的用户界面专门面向移动电话用户,可以对其进行自定义,主要由图标和列表组成,旨在适用于小至176 x 208 像素的屏幕。最终用户可以对其进行个性化设置,而制造商和网络运营商也可对其进行自定义。应用程序:Qtopia 手机版包含强大的手机应用程序套件,包括PIM 、工作辅助、电子邮件、游戏、媒体播放器(支持MP3 MPEG 等),以及众多用于手机个性化的实用工具。平台:Qtopia 手机版的核心功能存在于平台层次的特性。通过提供强大的操作环境Qtopia 手机版在占用较少内存的情况下实现智能手机的功能。同步:用户可以将手机与Qtopia Desktop (Trolltech 的一个跨平台桌面PIM 套件)或Microsoft Outlook 同步。Qtopia 手机版可以同步的内容包括:通讯录、日历事件、待办事宜,以及多媒体文件和文档。开发环境:为了正确地对手机进行自定义制造商需要强大的工具。Trolltech 为开发人员提供了一套工具,让他们能够自定义和扩展Qtopia 手机版。强大的开发环境让开发人员能够轻松地在桌面系统上进行开发,而后针对目标设备进行交叉编译。1.4 Linux操作系统在手机开发方面的优势Qtopia 手机版目前可运行在Linux 操作系统上。Linux 尤其适合于内存有限的设备,例如移动电话;并且,由于Linux 固有的模块化特性,它可以被轻松地配置为1MB 的分发包,完全能够驱动Qtopia 手机版。Linux 源代码可以免费获得,因此可以根据独特的嵌入式系统要求而自定义操作系统。对于手机制造商而言Linux 有以下利益:可定制内存需求:Linux 是模块化的经过配置即可满足大多数内存要求安全性:Linux 强制实施按用户分配的访问权限因而可以授予用户固定的权限以确保他们不会窜改手机的内部工作机制和手机运行所在的网络节省电源CPU 和内存占用量经过高度优化Linux 非常适合于运行在嵌入的空间中支持多种处理器:Linux 支持多种处理器架构包括x86、 ARM、PowerPC、 MIPS 和SH。成本优势:Linux 是免费的制造商随时可以免费下载Linux。支持:有许多公司都在为Linux 提供支持、服务和高级自定义。控制:由于Linux 随附源代码一同分发,制造商可以自由创新和创建自定义增强功能。技术方面的利益: 32 位支持 内存管理 进程控制 线程创建 压缩的闪存Flash 文件 系统 进程间通讯 芯片内执行的ROM 文件系统 TCP/IP 网络连接 IrDA 和蓝牙支持 电源管理从业务和技术角度来看Linux 的诸多强大优势表明它十分适合于手机的开发。2 环境搭建2.1 VMware简介VMware是一个“虚拟PC”软件。它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMware采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就像标准Windows应用程序那样切换.而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。2.2 安装Redhat2.3 利用Samba快速共享Windows文件假设你已熟悉Linux的基本操作,例如VI编辑器的使用、基本的操作文件命令。 现在我们有三台PC, 一台安装了window2000,名字是test2000,其上有共享文件夹share;其余两台安装了Linux,一台名字是testsamba,其上有一目录/pub;另一台名字是testlinux,其上也有一目录/pub。我们要实现的目标是把testsamba上的/pub共享,供test2000和test_linux的使用。 对test_samba我们进行下面操作: 在/etc/下找到smb.conf,用VI编辑器打开, # vi /etc/smb.conf或vi /etc/samba/smb.conf在【gobal】字段下,添加netbios记录,一般加在workgroup记录的下一行;netbios name = testsamba在【gobal】字段下,修改secrity记录; secrity = share在【public】字段下,修改path记录;path = /pub在【public】字段下,添加geuest ok记录;guest ok = yes删除【public】字段每行行首的“;”标示;保存退出。 简单解释一下,添加的netbios name是可以在test2000网络邻居中看得见的机器名;添加的/pub是可以在网络邻居中看见的共享目录;添加guest ok是允许所有用户都可以guest账户访问共享;删除“;”标示是要整个【public】字段成为可执行。 现在/pub就成为可以被test2000和testlinux两台机器共享的目录了。 试试看: 在testsamba下,为使用test2000下的共享文件夹可以进行以下操作: # Smbclient -L /test2000 此命令为查看test2000下的共享情况,注意在系统要求输入password时,直接回车即可进入test2000,此时屏幕上列出test2000下的共享。 #smbclient test2000share -U share (或smbmount/test2000/share /pub) 此命令可进入test2000的share目录,屏幕上出现MS-DOS的提示符:时说明用户进入了share目录。此时可以在提示符后输入?查找你可使用的命令。 在test2000下,使用testsamba的共享目录/pub,可以进行以下操作: 查找计算机testsamba,当testsamba目标出现时,双击图标pub,即进入共享文件夹pub了。 在testlinux下,使用testsamba的共享目录pub,可进行如下操作: (假设已知pub存在) #smbmount /testsamba/pub pub 此命令可把testsamba下的pub挂到本机的pub上,同上在系统要求输入password时,直接回车,接着依次输入#cd /pub/pub、#ls,屏幕即列出testsamba的pub目录下的文件了。 Win2000和Linux实现文件共享了。2.4 搭建Qtopia环境所用包的版本:QtopiaPDA-pc-all-0522压缩形式包:QtopiaPDA-pc-forZTES.tar.bz2把QtopiaPDA-pc-forZTES.tar.bz2包考到根目录下,到终端解压QtopiaPDA-pc-forZTES.tar.bz2:tar jxfv QtopiaPDA-pc-forZTES.tar.bz2然后生成一个QtopiaPDA-pc-all-0522文件夹,以后进行的操作就是在QtopiaPDA-pc-all-0522下。2.5 运行一个小应用环境搭建好后,接下来的任务是如何在Qtopia环境下运行一个小应用,以下是步骤:(1)编写程序下图为本节例子设计的用户界面,界面比较简单,只有两个控件,一个为多行文本,一个为按钮,如图所示:图1 使用Qt Designer 生成用户界面比如编写了如下的程序放在ynctest目录下/ examplebase.h#ifndef EXAMPLEBASE_H#define EXAMPLEBASE_H#include #include class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QMultiLineEdit;class QPushButton;class ExampleBase : public QWidget Q_OBJECTpublic: ExampleBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ExampleBase(); QPushButton* buttonOk; QMultiLineEdit* medit;#endif / EXAMPLEBASE_H/ examplebase.cpp#include examplebase.h#include #include #include #include #include #include /* * Constructs a ExampleBase which is a child of parent, with the * name name and widget flags set to f */ExampleBase:ExampleBase( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) if ( !name )setName( ExampleBase ); resize( 181, 153 ); setCaption( tr( Example ) ); buttonOk = new QPushButton( this, buttonOk ); buttonOk-setGeometry( QRect( 20, 110, 140, 32 ) ); buttonOk-setText( tr( Ok ) ); medit = new QMultiLineEdit( this, medit ); medit-setGeometry( QRect( 10, 10, 160, 90 ) ); medit-setWordWrap( QMultiLineEdit:WidgetWidth ); medit-setWrapPolicy( QMultiLineEdit:Anywhere );/* * Destroys the object and frees any allocated resources */ExampleBase:ExampleBase() / no need to delete child widgets, Qt does it all for us为了简单,我们只向其中添加一个功能:即点击OK按钮时,将文本框中的文本用户对话框形式显示出来。以下主窗口类的头文件及源文件。/ example.h#ifndef EXAMPLE_H#define EXAMPLE_H#include examplebase.hclass Example : public ExampleBase Q_OBJECTpublic: Example( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); Example();private slots: void onOk();#endif / EXAMPLE_H/ example.cpp#include example.h#include #include #include /* * Constructs a Example which is a child of parent, with the * name name and widget flags set to f */Example:Example( QWidget* parent, const char* name, WFlags fl ) : ExampleBase( parent, name, fl ) connect(buttonOk, SIGNAL(clicked(), this, SLOT(onOk();/* * Destroys the object and frees any allocated resources */Example:Example() / no need to delete child widgets, Qt does it all for us/* * A simple slot. not very interesting. */void Example:onOk() QString str = medit-text(); QMessageBox:information(this, example, str);所有应用程序的main.cpp文件应该采用如下模板:#include example.h#include QTOPIA_ADD_APPLICATION(example, Example)QTOPIA_MAIN把刚才编写的程序文件ynctest拷贝到QtopiaPDA-pc-all-0522srcapplications下。(2)新建工程文件(.pro文件)在编译些应用程序之前,需要为应用程序编写工程文件(.pro文件),这个过程一般都是手工完成,有关.pro各种选项的详细解释在Qtopia图形系统和应用开发.doc有详细说明,本节只给出在目前我们项目中可能要使用的一些选项。对于本例,.pro文件可编写如下:CONFIG+= qtopiaappTARGET= ynctestDESTDIR= $(QPEDIR)/binTEMPLATE = appCONFIG -= buildQuicklaunchHEADERS= examplebase.h example.h SOURCES= examplebase.cpp example.cpp main.cppLIBS+= -lzte -lzte1#TRANSLATIONS = filebrowser-en_GB.ts filebrowser-de.ts filebrowser-ja.ts filebrowser-no.tshelp.files=$QTOPIA_DEPOT_PATH/help/html/ynctest*help.path=/opt/Qtopia/help/htmldesktop.files=$QTOPIA_DEPOT_PATH/apps/Applications/ynctest.desktopdesktop.path=/opt/Qtopia/apps/ApplicationsINSTALLS+=desktop helpPACKAGE_DESCRIPTION=The ynctest for the Qtopia environment.其中:u TEMPLATE 为模板,app生成可执行程序,lib生成库;u CONFIG 编译配置;u CONFIG+= qtopiaapp 表示编译后自动会在/bin下生成二进制文件ynctest;u HEADERS 为应用程序所有的头文件;u SOURCES 为应用程序所有的源文件;u INTERFACES 为应用程序所有的用户界面文件;u LIBS 一行连接时需要的额外库文件;u TARGET 为目标文件的名称。(5)终端回到/src下面,找到gerenal.pri文件,用vi打开然后编辑:找到 APP_PROJECTS+=行下,输入添加一行:applications/ynctest 表示在在应用程序中添加上我们的应用程序名,以便在以后运行./cfg.sh时能生成相应的MakeFile.target文件。(6)终端回到QtopiaPDA-pc-all-0522目录下加载环境变量: 终端运行:.export.sh (注意前面有一个点和一个空格),或者终端运行 source export.sh然后生成MakeFile.target文件:终端运行:./cfg.sh(7)回到QtopiaPDA-pc-all-0522srcapplicationsynctest目录下编译程序:终端运行:make(8)回到QtopiaPDA-pc-all-0522bin目录下能找到ynctest二进制文件(9)回到QtopiaPDA-pc-all-0522appsApplications目录下将应用程序安装到Qtopia Phone中,需要desktop文件(必须),图标文件(必须)、及帮助文件(可选),当然,还有执行文件也是必须的。我们这里通过修改别的应用程序的desktop文件来加载自己的程序。比如找到dialer.desktop文件打开,然后修改为:Desktop EntryExec=ynctestIcon=secondmenu/applications/dialer/dialerType=ApplicationXValueStart=4XValueEnd=88YValueStart=47Name=a_YNCName zh_CN =a_鎷彿鍣?其中:u Comment 为应用程序的注释u Exec 为应用程序的执行文件名,Qtopia会根据文件在$QPEDIR/bin下找u Icon 为应用程序的图标文件名,Qtopia会根据文件在$QPEDIR/pics下找u Type 为类型,Qtopia 应用程序的Desktop类型都是Applicationu Name为应用程序在Qtopia菜单中显示的名称(10)运行程序 终端运行:. export.sh 然后运行:./startphone启动手机虚拟平台3 Qt工具介绍和使用3.1 概述l Qt提供了下面几个命令行和绘画工具以加快开发进程:l Qt Designer 可视化设计窗体l Qt Linguist, lupdate与lrelease 将应用程序转化为国际化版本l Qt Assistant 可以快速地查找你所需要的帮助l Qmake 由简单的平台无关工程文件生成各平台Makefilesl Qembed 将数据(如图片)转化为C+代码l qvfb 在桌面测试和运行嵌入式应用程序l makeqpf 为嵌入式设备创建预置字体(pre-rendered fonts)l moc 元对象编译器(the Meta Object Compiler)l uic 用户界面编译器(User Interface Compiler)l qtconfig 一个基于Unix的Qt 配置工具3.2 翻译工具Qt翻译工具包括Qt Linguist, lupdate和lrelease。3.2.1 译文内容翻译文件包含应用程序中所有用户可见文本和控件的加速键。3.2.2 翻译过程翻译文件通过以下方式创建:1、首先运行lupdate创建翻译的源文件.ts,其中包含所有可视的文本(还未翻译)。2、ts文件提供给翻译者,由翻译者使用 Qt Linguist 给出翻译文本,Qt Linguist 管理源文件的所有变化或删除操作。3、运行lupdate将翻译后的新文本添加到应用程序中,lupdate同步应用程序与译文的可视文本,它不破坏任何数据。第2和第3步经常需要重复当发行一个应用程序时需要运行lrelease读取.ts文件,并生成应用程序运行时需要的.qm文件。3.2.3 项目文件(.pro)lupdate需要知道生成哪个翻译文件,这可以通过简单地将文件列在应用程序的.pro文件中,即Qt工程文件,例如:TRANSLATIONS = tt2_fr.ts tt2_nl.ts3.2.4 Qt Linguist相关的文件l .ts 翻译源文件 是一个可读的XML文件,包含源短语及它们的翻译,这些文件通常由lupdate创建与更新,并且每个应用程序有各自的.ts文件。l .qm Qt消息文件 是一个二进制文件,包含应用程序运行时的翻译,这些文件由lrelease创建,但也可以由Qt Linguist创建。l .qph Qt短语本文件 是一个可读的XML文件,包含标准短语及它们的翻译,这些文件由Qt Linguist创建和更新,可由多个工程和应用程序使用。使用QTextCodec:locale()的例子见 toolslinguisttutorialtt3例子examplesi18n说明如何在应用程序中使用多种语言。3.3 qmakeqmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。手写Makefile是比较困难并且容易出错的,尤其是如果需要给不同的平台和编译器组合写几个Makefile。使用qmake,开发者创建一个简单的项目文件并且运行qmake生成适当的Makefile。qmake会注意所有的编译器和平台的依赖性,把开发者解放出来只关心他们的代码。Trolltech公司使用qmake作为Qt库和Qt所提供工具的主要创创建工具。qmake也注意了Qt的特殊需求,可以自动的包含moc和uic的创建规则。3.3.1 qmake概念3.3.2 QMAKESPEC环境变量在qmake可以被用于build makefiles之前,QMAKESPEC环境变量必须被设置为系统所使用的platform-compiler组合。QMAKESPEC告诉qmake在哪里可以找到平台和编译器特定信息。这确保正确的库被使用和生成的makefile使用恰当的语法。当前支持的platform-compiler组合列表可以在qt/mkspecs里找到。例如,在Windows上使用Microsoft Visual Studio,需把QMAKESPEC设置为win32-msvc; 在Solaris上使用gcc,需要把QMAKESPEC设置为solaris-g+。在qt/mkspecs里的每个目录都有一个包含了平台和编译器特定信息的qmake.conf文件。这些设置适用于你要使用qmake的任何项目,请不要修改它,除非你是一个专家。例如,假设你所有的应用程序都必须和一个特定的库连接,你可以把这个信息添加到相应的qmake.conf文件里。3.3.3 项目文件(.pro)一个项目文件是用来告诉qmake关于为某应用程序创建makefile所需要的细节。举例,一个源文件和头文件的列表;任何应用程序特定的配置,比如一个必须连接的额外库或者一个额外的包含路径,都应该放到项目文件中。l 注释:你可以为项目文件添加注释。注释由“#”符号开始,一直到这一行的结束。l 模板:模板变量告诉qmake该为某应用程序生成哪种makefile,有下面这些选择。app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。lib - 建立一个库的 makefile。vcapp - 建立一个应用程序的 Visual Studio 项目文件。vclib - 建立一个库的 Visual Studio 项目文件。subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录,并且为一个项目文件生成makefile 并且为它调用make的makefile。app模板:app模板告诉qmake为建立一个应用程序生成一个makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。你应该在你的.pro文件中使用它们来为你的应用程序指定特定信息。HEADERS - 应用程序中的所有头文件的列表。SOURCES - 应用程序中的所有源文件的列表。FORMS - 应用程序中的所有 .ui文件(由 Qt设计器生成)的列表。LEXSOURCES - 应用程序中的所有 lex 源文件的列表。YACCSOURCES - 应用程序中的所有 yacc 源文件的列表。TARGET - 可执行应用程序的名称。默认值为项目文件的名称。(如果需要扩展名,会被自动加上。)DESTDIR - 放置可执行程序目标的目录。DEFINES - 应用程序所需的额外的预处理程序定义的列表。INCLUDEPATH - 应用程序所需的额外的包含路径的列表。DEPENDPATH - 应用程序所依赖的搜索路径。VPATH - 寻找补充文件的搜索路径。DEF_FILE - 只有 Windows 需要:应用程序所要连接的 .def 文件。RC_FILE - 只有Windows需要:应用程序的资源文件。RES_FILE - 只有Windows需要:应用程序所要连接的资源文件。你只需要使用那些你已经有值的系统变量,例如,如果你不需要任何额外的INCLUDEPATH,那么你就不需要指定它,qmake会为所需的提供默认值。例如,一个实例项目文件也许就像这样:TEMPLATE = appDESTDIR = c:helloappHEADERS += hello.hSOURCES += hello.cpp SOURCES += main.cppDEFINES += QT_DLLCONFIG += qt warn_on release如果条目是单值的,比如template或者目的目录,我们是用“=”,但如果是多值条目,我们使用“+=”来为这个类型添加现有的条目。使用“=”会用新值替换原有的值,例如,如果我们写了DEFINES=QT_DLL,其它所有的定义都将被删除。lib模板:lib模板告诉qmake为建立一个库而生成makefile。当使用这个模板时,除了app模板中提到系统变量,还有一个VERSION(目标库的版本号)是被支持的。你需要在为库指定特定信息的.pro文件中使用它们。subdirs模板:subdirs模板告诉qmake生成一个makefile,它可以进入到特定子目录并为这个目录中的项目文件生成makefile并且为它调用make。在这个模板中只有一个系统变量SUBDIRS可以被识别。这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样qmake就可以发现它。例如,如果子目里是“myapp”,那么在这个目录中的项目文件应该被叫做。3.3.4 CONFIG变量配置变量指定了编译器所要使用的选项和所需要被连接的库。配置变量中可以添加任何东西,但只有下面这些选项可以被qmake识别。l 下面这些选项控制着使用哪些编译器标志:release - 应用程序将以release模式连编。如果“debug”被指定,它将被忽略。debug - 应用程序将以debug模式连编。warn_on - 编译器会输出尽可能多的警告信息。如果“warn_off”被指定,它将被忽略。warn_off - 编译器会输出尽可能少的警告信息。l 下面这些选项定义了所要连编的库/应用程序的类型:qt - 应用程序是一个Qt应用程序,并且Qt库将会被连接。thread - 应用程序是一个多线程应用程序。x11 - 应用程序是一个X11应用程序或库。windows - 只用于“app”模板:应用程序是一个Windows下的窗口应用程序。console - 只用于“app”模板:应用程序是一个Windows下的控制台应用程序。dll - 只用于“lib”模板:库是一个共享库(dll)。staticlib - 只用于“lib”模板:库是一个静态库。plugin - 只用于“lib”模板:库是一个插件,这将会使dll选项生效。例如,如果你的应用程序使用Qt库,并且你想把它连编为一个可调试的多线程的应用程序,你的项目文件应该会有下面这行: CONFIG += qt thread debug注意,你必须使用“+=”,不要使用“=”,否则qmake就不能正确使用连编Qt的设置了,比如没法获得所编译的Qt库的类型了。3.4 qmake高级概念迄今为止,我们见到的qmake项目文件都非常简单,仅仅是一些name = value和name += value的列表行。qmake提供了很多更强大的功能,比如你可以使用一个简单的项目文件来为多个平台生成 makefile。3.4.1 操作符l = 操作符这个操作符简单分配一个值给一个变量。使用方法如下: TARGET = myapp这将会设置TARGET变量为myapp。这将会删除原来对TARGET的任何设置。l += 操作符这个操作符将会向一个变量的值的列表中添加一个值。使用方法如下: DEFINES += QT_DLL这将会把QT_DLL添加到被放到makefile中的预处理定义的列表中。l -= 操作符这个操作符将会从一个变量的值的列表中移去一个值。使用方法如下: DEFINES -= QT_DLL这将会从被放到makefile中的预处理定义的列表中移去QT_DLL。l *= 操作符这个操作符仅仅在一个值不存在于一个变量的值的列表中的时候,把它添加进去。使用方法如下: DEFINES *= QT_DLL只用在QT_DLL没有被定义在预处理定义的列表中时,它才会被添加进去。l = 操作符这个操作符将会替换任何与指定的值的正则表达式匹配的任何值。使用方法如下: DEFINES = s/QT_DT.+/QT这将会用QT来替代任何以QT_D或QT_T开头的变量中的QT_D或QT_T。3.4.2 作用域作用域和“if”语句很相似,如果某个条件为真,作用域中的设置就会被处理。作用域使用方法如下:win32 DEFINES += QT_DLL上面的代码的作用是,如果在Windows平台上使用qmake,QT_DLL定义就会被添加到makefile中。如果在Windows平台以外的平台上使用qmake,这个定义就会被忽略。你也可以使用qmake执行一个单行的条件/任务,就像这样:win32:DEFINES += QT_DLL比如,假设我们想在除了Windows平台意外的所有平台处理些什么。我们想这样使用作用域来达到这种否定效果:!win32 DEFINES += QT_DLLCONFIG行中的任何条目也都是一个作用域。比如,你这样写:CONFIG += warn_on你将会得到一个称作“warn_on”的作用域。这样将会使在不丢失特定条件下可能所需的所有自定义设置的条件下,很容易地修改项目中的配置。因为你可能把你自己的值放到CONFIG行中,这将会为你的makefile而提供给你一个非常强大的配置工具。比如:CONFIG += qt warn_on debugdebug TARGET = myappdebugrelease TARGET = myapp在上面的代码中,两个作用域被创建,它们依赖于CONFIG行中设置的是什么。在这个例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论