资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,AdvanceYourPotential,Meego软件开发基础,王宗鑫,2011.1,文思保密信息,AdvanceYourPotential,本次介绍的技术范围和特点,技术范围:(目前文思能够接触到的),ApplicationFramework,MeegoAPI(=QtAPI),技术特点:,广泛采用IoC技术,动态加载软件包,基于Qt开发,利用Debian来配置和维护软件依赖关系,开发环境:,Ubuntu,Scratchbox,2,讲座提纲,1、Qt开发基础,2、Debian基础,3、Git介绍,4、其他开发工具使用经验,3,Qt开发基础,4,Qt开发基础,1、安装Qt开发包,2、QObject和QGrapthicsItem,3、signal-slot实例讲解,4、QEvent介绍,5、编写QtMakefile的常用技巧,6、利用Qtest框架来完成UnitTest,7、QML简介,5,QMAKE_CLEAN:指定“makeclean”时需要清除的文件列表,com下载qtcreator-linux-x86-opensource-2.,利用Debian来配置和维护软件依赖关系,chmod700/.,DEFINES:定义宏,(3)创建本地debian源(举例说明),QObject:Qt对象模型的核心单元,利用Qtest框架来完成UnitTest,sudoapt-getinstalldebhelper,sudoapt-getinstalldebhelper,QMAKE_EXTRA_TARGETS:指定自定义的编译操作目标,mkdir/home/wzx/local_deb,(2)slot的声明与实现:参数与singal相对应;,QMAKE_CXXFLAGS_DEBUG:指定补充的C+编译标志。,生成RSA密钥:mkdir/.,安装Qt开发包,第一种方式:利用Debian命令自动安装,(目前此方式只能得到Qt4.6.2以下版本和Qt-Creator1.3.1版,,不能提供对QML的足够支持),(1)安装Qt:,sudoapt-getinstalllibqtcore4,(2)安装Qt-Creator:,sudoapt-getinstallqt-creator,6,安装Qt开发包,第二种方式:下载最新版本Qt软件包手动安装,(此方法可以获得最新版Qt和Qt-Creator,便于QML开发。但是安装,时间较长。),(1)安装Qt:,解压缩后在相应目录下运行(以下命令运行时间较长),configure,make,sudomakeinstall,(2)安装Qt-Creator:,从下载qtcreator-linux-x86-opensource-2.1.81-201101150111-setup.bin后,运行此文件。,7,安装Qt开发包,第三种方式:在Windows下安装Qt,(1)安装MinGW,(4)用Qt-Creator打开工程后,可能需要在Project标签中做相应设置,8,QObject和QGraphicsItem,QObject:Qt对象模型的核心单元,(1)实现signal-slot通讯机制,(2)被所有的QtWidget类继承,(3)并不是被所有的Qt类继承:例如QString等非UI类。,9,QObject和QGraphicsItem,QGraphicsItem:,基于QGraphicsScene展现的所有图形元素的基类,(1)与QWidget相比,是轻量级模块,(2)主要功能包括:设置图形元素坐标与尺寸、重绘、事件处理、冲突检测,(3)没有继承QObject(QGraphicsObject继承了QObject),10,signal-slot实例讲解,signal-slot的用途:方便实现对象之间的函数回调,参考例程:Demo_signalSlot,程序要点:,(1)signal的声明:注意参数设计;返回值类型必须是void。,(2)slot的声明与实现:参数与singal相对应;返回值类型必须是void。,(3)如何连接singal与slot。,(4)正则表达式的简单用法。,11,QEvent介绍,主要概念:,(1)QApplication获取窗口事件,将窗口事件转换成QEvent,发送给相应的,QObject(或其子类)对象。,(2)事件一般是系统隐式传递,但是也可以通过sendEvent()或postEvent()方法,来显示发送。,(3)QObject类是能过其event()方法被调用来接收事件,event()方法可以被子类,覆盖。,(4)请用关键字“QEvent:Type”在Qt-Creator的”Help”标签中查看全部事件,类型。,(5)对于应用程序来说,常常通过重写QGraphicsItem:paint()或者其他UI,Widget类的paint()方法以,来绘制图形界面。,12,编写QtMakefile的常用技巧,QMake的一般理解:,(1)qmake依赖gcc/g+,但是在调用gcc/g+之前做了一些特殊处理。,(2)QtMakefile通常以.pro,.pri,.prf为后缀名。,(3)编译过程:先用qmake将.pro/.pri/.prf转换成gcc/g+可以接受的Makefile,,然后运行make来执行编译。,(4)QMake提供了一些系统变量来配置编译选项。,13,编写QtMakefile的常用技巧,QMake常用的系统变量:,TMPLATE:指定编译类型(app/lib/),TARGET:指定编译目标的名字,DESTDIR:指定编译目标文件的存放目录,HEADERS:源码头文件列表,SOURCES:源码实现文件列表(cpp/c/),INCLUDEPATH:引用的头文件目录,LIBS:需要链接的其他库的目录(-L)和库名(-l)列表,INSTALLS:需要被安装的目标列表,DEFINES:定义宏,14,编写QtMakefile的常用技巧,其他常用的QMake系统变量:,CONFIG:控制当前编译debug/release版;是否打开编译警告开关;是否递归(,与SUBDIRS结合使用);其他编译器标志;,QT:指定所需要的Qt功能模块,QMAKE_CXXFLAGS_DEBUG:指定补充的C+编译标志。,(类似地,还有一些其他指定补充编译标志的变量),QMAKE_CLEAN:指定“makeclean”时需要清除的文件列表,QMAKE_DISTCLEAN:指定“makedistclean”时需要清除的文件列表,QMAKE_EXTRA_TARGETS:指定自定义的编译操作目标,15,编写QtMakefile的常用技巧,参考建议:,(1)在Qt-Creator的Help中,输入“qmakeVariable,Reference”关键字来查看全部QMake环境变量说明。,(2)巧妙使用QMAKE_EXTRA_TARGETS可以提高工作的自动,化程度。,16,利用Qtest框架来完成UnitTest,(1)请参考例程Demo_qtest,(2)基本要点:,需要注意QT+=testlib,QTest框架的基本特点与CppUnit类似,注意initTestCase()/cleanupTestCase()与init()/cleanup()的区别,(观察输出结果可以看出区别),通过“makecheck”来执行UT程序,利用gcov统计覆盖率数据,并使用lcov将这些数据转换成HTML表单,17,利用Qtest框架来完成UnitTest,(3)Gcov是gcc的一部分,不需要另外安装,(4)lcov可用如下命令来安装:,sudoapt-getinstalllcov,(5)注意code_coverage.sh中对lcov的使用,(6)注意查看测试覆盖率HTML表单。,18,QML简介,(1)请参考例程CangjieDemo,(请注意保密),:,请使用Qt-Creator2.1.81和Qt4.7.1来打开这个工程。,本例程是仓颉输入法软键盘的一个范例,仅包括UI界面,不能提供候选字。,(2)QML技术特点:,源自对微软XAML的借鉴,基于XML和JavaScript来开发UI,QML引擎解析UI描述文件并转换成相应的QGraphicsObject对象来展现,由于QML引擎的解析效率还不能做到足够好,对系统空间和时间的开销还比较大,19,Qt小结,建议:,熟练使用signal-slot,目前QGraphicsItem有取代QWidget的趋势(请参考Qt-Creator附带的例程),Nokia目前对TDD(TestDrivenDevelopment)要求很严格,因此熟练掌握QTest是,非常必要的,掌握基本的QtMakefile的编写技巧,QML目前还没大规模在手机软件开发中使用,但是对于快速检验UI设计方案很有帮,助,利用Qt-Creator的Help标签,可以得到很好的帮助,,这是最权威的。,20,Debian基础,21,Debian基础,Debian软件包一般以.deb为后缀名,每个debian包都需要指定自己所依赖的软件包及其版本,DebianGNU/Linux系统会自动建立依赖关系树,并保障依赖关系正确,公共Debian包一般集中存放在指定的服务器上,便于用户下载安装,可以使用apt-get或dpkg命令工具来安装、升级、卸载Debian包,可以用dpkg-dev和debhelper工具来创建debian包,22,Debian基础,(1)Debian系统常用操作简介,必要准备:sudoapt-getupdate,说明:这个操作是根据/etc/apt/sources.list包含的debian服,务器列表,更新当前可用debian包查找索引列表。,全面升级系统当前已安装的debian包:sudoapt-getupgrade,查找debian包:apt-cachesearch,安装debian包:sudoapt-getinstall,或者sudodpkgi,23,Debian基础,卸载debian包:sudoapt-getpurge,或者sudoapt-getremove,或者sudodpkgP,说明:在卸载完成后,可能需要接着运行sudoapt-get,autoremove,来自动清除其他已经不需要保留的debian包,查询debian包是否已安装:dpkgs,24,Debian基础,(2)创建自己的debian包,需要安装dpkg-dev和debhelper:,sudoapt-getinstalldpkg-dev,sudoapt-getinstalldebhelper,需要准备的数据文件:参见例程Demo_qtest的debian目录,changelog:版本历史记录,compat:字节对齐说明,一般是4(针对ARM),control:指定依赖关系,rules:需要执行的命令(请参考debhelper帮助),*.install:根据需要添加,用以说明相应debian包中将要包含的内容,25,Debian基础,生成debian包的命令:,dpkg-buildpackage-rfakeroot-b(保留中间文件),或者dpkg-buildpackage-rfakeroot-b-tc(不保留中间文件),例程Demo_qtest可生成两个debian包:,可以用sudodpkg-i和sudodpkg-P来安装和卸载上述包,26,Debian基础,(3)创建本地debian源(举例说明),mkdir/home/wzx/local_deb,拷贝例程Demeo_qtest生成的两个debian包到/home/wzx/local_deb/,在/home/wzx/目录下执行:sudodpkg-scanpackageslocal_deb/dev/null|,gziplocal_deb/Packages.gz,在/etc/apt/sources.list末尾追加一行“deb,file:/home/wzxlocal_deb/,”,sudoapt-getupdate,OK,现在可以检验是否可以自动安装上述包了。,这个例子可以简单说明debian服务器如何工作。,27,Git基础,28,Git基础,(1)创建自己的gitserver:,exportEDITOR=vim(不妨写在.bashrc中,以后git操作使用的编辑器就是vim),安装git-core和gitosis:sudoapt-get-yinstallgit-coregitosis,生成RSA密钥:mkdir/.ssh,chmod700/.ssh,ssh-keygen-trsa,初始化gitosis:sudo-H-ugitosisgitosis-init,/home/wzx/.ssh/id_rsa.pub,下载gitserver管理工程:gitclone,gitosis127.0.0.1:gitosis-admin.git,29,Git基础,编辑gitosis-admin目录下的gitosis.conf文件,加入这些行:,groupteam,writable=git_test_1,members=wzxwzx-kernel,然后在这个目录下执行:gitadd./,gitcommit,gitpushoriginmaster:master,30,Git基础,另找一个目录,创建目录git_test_1,然后执行:,gitinit,gittouchhello.txt,gitadd.,gitcommit-a,gitremoteaddorigin,gitosis127.0.0.1:git_test_1.git,gitpushoriginmaster:master,OK,请查看/srv/gitosis/repositories目录,这就是本地服务器存放数据的,git-repository.,31,Git基础,(2)接下来做什么?,请仔细阅读,manual.html,,虽然很长,但是很简单也很有帮助。,请在自己搭建的本地gitserver与client之间做试验,这样更容易掌握git。,有向无环图:这是git的核心数据结构。使用git不需要了解它的细节,但是了解,它的逻辑概念会有所帮助。,32,其他开发工具使用经验,33,其他开发工具使用经验,Umbrello,安装:sudoapt-getinstallumbrello,这是个简单易用的UML建模工具,不要指望UML建模工具能包打天下,因为UML语义与C+代码实现不是一一对应的,,而是一对多或多对多的关系。,对于UML的使用,目前争议很多,但是利用UML建模工具可以帮助理解代码,找到,有效的改进方案。,出于为Nokia保密的原因,我不能共享我画的UML图,只能临时演示,请谅解。,34,Q&A,35,谢谢!,
展开阅读全文