Qt程序开发完全手册范本_第1页
Qt程序开发完全手册范本_第2页
Qt程序开发完全手册范本_第3页
Qt程序开发完全手册范本_第4页
Qt程序开发完全手册范本_第5页
已阅读5页,还剩19页未读, 继续免费阅读

下载本文档

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

文档简介

目录第一章Linux图形用户界面GUI介绍 21.1常用GUI介绍 21.2关于Qt 31.3Qt/Embedded简介 4第二章Qt的安装 52.1设置环境变量 62.2使用脚本arm-build编译Qt 7第三章Qt的编程 73.1Qt/Embedded开发一个嵌入式应用的过程 73.2“hello”Qt的初探 73.2.1建立工程文件 73.2.2产生源代码 123.2.3添加main.cpp文件 123.2.4修改文件 133.2.5生成MakeFile文件 143.2.6修改hello.cpp文件 153.3将hello移植到JXARM9-2410实验箱上 183.3.1重新生成修改Makefile 183.3.2制作启动器 223.3.3重新生成cramfs文件 233.3.4烧写重新生成的cramfs文件到JXARM9-2410实验箱 23第一章Linux图形用户界面GUI介绍 所谓GUI(GraphicsUserInterface)就是图形用户界面。图形用户界面的广泛流行时当今计算机技术的重大成就之一,它极大的方便了非专业用户的使用,人们不需要死记硬背大量的命令,而可以通过窗口,菜单方便的操作。 随着手持式设备的硬件条件的提高,嵌入式系统对轻量级GUI的需求越来越迫切。近来的市场需求显示,越来越多的嵌入式系统,包括PDA、机顶盒、DVD/VCD播放机、WAP手机等等系统均要求提供全功能的Web浏览器。这包括HTML4.0的支持、JavaScript的支持,甚至包括Java虚拟机的支持。而这一切均要求有一个高性能、高可靠的GUI的支持。另外,在工业实时控制系统中对GUI的要求也越来越高。目前许多这类系统采用比较简单的手法实现GUI。但是,在出现Linux系统之后,许多工业控制系统开始采用Linux作为操作系统,并在其上加入GUI实现。 嵌入式GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。所以嵌入式GUI在实际应用中,有如下基本要求:轻型,占用源少高性能高可靠性可配置1.1常用GUI介绍1.Linux下的GUI–XWindow XWindow是Linux以及其他类UNIX系统的标准GUI。XWindow系统采用标准的客户/服务器体系结构,具有可扩展性好、可移植性好等优点。但该系统的庞大、累赘和低效率也是大家所共知的。 为了获得应用程序的可移植性,许多厂家都试图通过对XWindow系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为800K的X服务器。这对西方国家来说基本能够满足嵌入式系统的需求了。但该系统的源代码尚不开放,从而很难进行本地化开发。2.Linux下的GUI–MicroWindows MicroWindows是一个开放源码的项目,目前由美国一家公司在主持开发。该项目的开发非常活跃,国也有人参与了其中的开发,并编写了GB2312等字符集的支持。 该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能,比如Alpha混合,三维支持,TrueType字体支持等。但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等的驱动还很不完善。3.Linux下的GUI–OpenGUI OpenGUI在Linux系统上存在已经很长时间了。最初的名字叫FastGL,只支持256的线性显存模式。但目前也支持其他显示模式。这个库是用C++编写的,只提供C++接口。4.Linux下的GUI–MiniGUIMiniGUI是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上。 MiniGUI同时也是国最早出现的几个自由软件项目之一。是由中国人开发的GUI。5.Linux下的GUI–QT/EmbeddedQT/Embedded是著名的QT库开放商正在进行的面向嵌入式系统的QT版本。这个版本的主要特点是可移植性较好,许多基于QT的XWindow程序可以非常方便地移植到嵌入式版本。但是该系统不是开放源码的,如果你要使用这个库,可能需要支付昂贵的授权费用。1.2关于QtQt是Trolltech公司的一个标志性产品。Trolltech公司1994年成立于挪威,但是公司的核心开发团队已经在1992年开始了Qt产品的研发,并于1995年推出了Qt的第一个商业版,直到现在Qt已经被世界各地的跨平台软件开发人员使用,而Qt的功能也得到了不断的完善和提高。Qt是一个支持多操作系统平台的应用程序开发框架,它的开发语言是C++。Qt最初主要是为跨平台的软件开发者提供统一的,精美的图形用户编程接口,但是现在它也提供了统一的网络和数据库操作的编程接口。正如微软当年为操作系统提供了友好,精致的用户界面一样,今天由于Trolltech的跨平台开发框架Qt的出现,也使得UNIX、LINUX这些操作系统以更加方便、精美的人机界面走近普通用户。Qt是以工具开发包的形式提供给开发者的,这些工具开发包包括了图形设计器,Makefile制作工具,字体国际化工具,Qt的C++类库等等。Qt的类库也是等价于MFC的开发库,但是Qt的类库是支持跨平台的类库Qt支持的操作系统平台:◆MS/Windows95、Windows98、WindowsNT4.0、Windows2000、WindowsXP◆Unix/X11Linux、SunSolaris、HP-UX、CompaqTrue64Unix、IBMAIX、SGIIRIX和很多其它X11平台◆MacintoshiMacOSX◆嵌入式的,包含有FramBuffer的Linux平台1.3Qt/Embedded简介Qt/Embedded是一个为嵌入式设备上的图形用户接口和应用开发而订做的C++工具开发包.它通常可以运行在多种不同的处理器上部署的嵌入式Linux操作系统上 除了类库以外,Qt/Embedded还包括了几个提高开发速度的工具,使用标准的QtAPI,我们可以非常熟练的在Windows和Unix编程环境里开发应用程序。 Qt/Embedded是一组用于访问嵌入式设备的QtC++API;Qt/Embedded的Qt/X11,Qt/Windows和Qt/Mac版本提供的都是相同的API和工具。Qt/Embedded还包括类库以及支持嵌入式开发的工具。 Qt/Embedded提供了一种类型安全的被称之为信号与插槽的真正的组件化编程机制,这种机制和以前的回调函数有所不同。Qt/Embedded还提供了一个通用的widgets类,这个类可以很容易的被子类化为客户自己的组件或是对话框。针对一些通用的任务,Qt还预先为客户定制了像消息框和向导这样的对话框。Qt/Embedded包括了它自身的窗口系统,并支持多种不同的输入设备。Qt的图形设计器(designer)可以用来可视化地设计用户接口,设计器中有一个布局系统,它可以使你设计的窗口和组件自动根据屏幕空间的大小而改变布局。开发者可以选择一个预定义的视觉风格,或是建立自已独特的视觉风格。使用UNIX/LINUX操作系统的用户,可以在工作站上通过一个虚拟缓冲帧的应用程序仿真嵌入式系统的显示终端。Qt/Embedded也提供了许多特定用途的非图形组件,例如国际化,网络和数据库交互组件。Qt/Embedded是成熟可靠的工具开发包,它在世界各地被广泛使用。除了在商业上的许多应用以外,Qt/Embedded还是为小型设备提供的Qtopia应用环境的基础。Qt/Embedded以简洁的系统,可视化的表单设计和详致的API让编写代码变得愉快和舒畅。第二章Qt的安装一般来说,居于Qt/Embedded开发的应用程序最终会发布到安装有嵌入式Linux操作系统的小型设备上。需要的软件包:tmake工具安装包(生成Qt/Embedded应用工程的Makefile文件)Qt/Embedded安装包(Qt/Embedded安装包)Qt的X11版的安装包(Qt的X11版的安装包,它将产生x11开发环境所需要的两个工具)公司提供的软件包如下:2.1设置环境变量 在PC的Linux的终端执行如下命令,然后打开gedit编译器后,修改容如下红色部分所示: #gedit/etc/ld.so.conf /home/cvtech/jx2410/qt2410/arm/qt/lib/home/cvtech/jx2410/qt2410/arm/qtopia/lib/usr/kerberos/lib/usr/X11R6/lib/usr/lib/sane/usr/lib/qt-3.1/lib/usr/lib/mysql/usr/lib/qt2/lib2.2使用脚本arm-build编译Qt 这里假设以上的软件包已经全部拷贝到PC的Linux中,且存放目录为:/home/cvtech/jx2410/qt2410/ 在PC的Linux的终端执行如下命令: #cd/home/cvtech/jx2410/qt2410/ #./arm-build,然后就开始编译Qt了。注意:这里我使用的是Redhat9.0,然后是完全安装的,RedHat9.0完全安装大概需要4.8G的空间,如果不完全安装会导致编译出错,原因是缺少必要的库导致的。第三章Qt的编程3.1Qt/Embedded开发一个嵌入式应用的过程选定嵌入式硬件平台在工作的机器上安装Qt/Embedded工具开发包根据目标硬件平台,交叉编译Qt/Embedded的库在工作的机器上进行应用程序的编码,调试根据目标硬件平台,交叉编译嵌入式应用在嵌入式硬件设备上调试运行应用发布嵌入式应用3.2“hello”Qt的初探 第一次Qt程序实现一个功能,就是按下我们设置的user按钮后,显示出“hellocvtech”的打印信息,按下close按钮后,退出该应用程序。3.2.1建立工程文件 在PC的Linux的“/home/cvtech/jx2410/examples/qt/”目录下新建一个名为:“hello”的目录,命令如下:#cd/home/cvtech/jx2410/examples/qt/ #mkdirhello 建立工程文件,命令如下:#progen–tapp.t– 在后台启动QT的设计器,命令如下:#/home/cvtech/jx2410/qt2410/arm/qt/bin/designer& 新建项目文件,选择工具栏File—>new—>Dialog,然后点击OK按钮,结果如下: 设置Form1的属性,修改“name”为hello,修改“caption”为HelloCvtech。 然后添加两个按钮,分别修改“name”分别为obutton和cbutton,修改“text”分别为open和close。 然后在添加一个text图标,修改“name”为Tlabel,修改“text”为空。设置完成后,如图: 完成以上工作后,我们需要添加函数,使按钮能够对其进行响应,方法如下:选择工具栏中的Edit—>slot,新建两个函数,分别为open()和close(),如图所示: 下面的操作涉及到了QT中的信号和槽的概念,我的理解按钮的操作时信号,槽就是该操作所响应的函数。如下图所示,完成open按钮和close按钮的。 首先点击按钮,然后点住open按钮不要松开,向上拉动到Form1的空白地方,如图: 同样的方法建立close按钮的响应关联,如图: 然后在Edit—>slot中去除close()函数,如图: 完成以上操作后,保存图形文件,点击工具栏File—>save,如图: 然后退出设计器。 注意:每次修改*.ui的工程文件后,必须使用下面的方法重新生成源码,否则会出现编译出错的情况。3.2.2产生源代码 在PC的Linux的终端中,输入命令如下: #/home/cvtech/jx2410/qt2410/arm/qt/bin/uic–ohello.hhello.ui #/home/cvtech/jx2410/qt2410/arm/qt/bin/uic–ohello.cpp-implhello.hhello.ui3.2.3添加main.cpp文件 在PC的Linux的终端中,输入命令如下: #vimain.cpp代码如下所示:#include"hello.h"#include<qapplication.h>#defineQT_NO_WIZARDintmain(intargc,char**argv){ QApplicationa(argc,argv); hellodlg; a.setMainWidget(&dlg); dlg.show(); returna.exec();}3.2.4修改文件 在PC的Linux的终端中,输入命令如下: # 修改容如下: TEMPLATE =appCONFIG =qtwarn_onreleaseHEADERS =hello.hSOURCES =hello.cpp\ main.cppINTERFACES =3.2.5生成MakeFile文件 在PC的Linux的终端中,输入命令如下: # 此时得到的Makefile文件编译出来的hello,是在PC的Linux上可以运行的。#make得到可执行文件hello,在PC的Linux的终端中,输入命令如下:#./hello得到界面如下:3.2.6修改hello.cpp文件 为了实现前面讲到的按下open按钮,出现“hellocvtech”的打印信息,我们还需要修改文件,以下为源码容: /******************************************************************************Formimplementationgeneratedfromreadinguifile'hello.ui'****Created:ThuNov1210:38:172009**by:TheUserInterfaceCompiler(uic)****WARNING!Allchangesmadeinthisfilewillbelost!****************************************************************************/#include"hello.h"#include<qlabel.h>#include<qpushbutton.h>#include<qlayout.h>#include<qvariant.h>#include<qtooltip.h>#include<qwhatsthis.h>/**Constructsahellowhichisachildof'parent',withthe*name'name'andwidgetflagssetto'f'**Thedialogwillbydefaultbemodeless,unlessyouset'modal'to*TRUEtoconstructamodaldialog.*/hello::hello(QWidget*parent,constchar*name,boolmodal,WFlagsfl):QDialog(parent,name,modal,fl){if(!name) setName("hello");resize(312,280);setCaption(tr("HelloCvtech"));cButton=newQPushButton(this,"cButton");cButton->setGeometry(QRect(180,190,91,31));cButton->setText(tr("close"));oButton=newQPushButton(this,"oButton");oButton->setGeometry(QRect(40,190,91,31));oButton->setText(tr("open"));TLabel=newQLabel(this,"TLabel");TLabel->setGeometry(QRect(30,60,250,51));QFontTLabel_font(TLabel->font());TLabel_font.setPointSize(30);TLabel->setFont(TLabel_font);TLabel->setText(tr(""));//signalsandslotsconnectionsconnect(oButton,SIGNAL(clicked()),this,SLOT(open()));connect(cButton,SIGNAL(clicked()),this,SLOT(close()));}/**Destroystheobjectandfreesanyallocatedresources*/hello::~hello(){//noneedtodeletechildwidgets,Qtdoesitallforus}/**Maineventhandler.Reimplementedtohandleapplication*fontchanges*/boolhello::event(QEvent*ev){boolret=QDialog::event(ev);if(ev->type()==QEvent::ApplicationFontChange){ QFontTLabel_font(TLabel->font()); TLabel_font.setPointSize(30); TLabel->setFont(TLabel_font);}returnret;}voidhello::open(){TextLabel1->setText(tr("HelloCvtech!"));//qWarning("hello::open():Notimplementedyet!");} 在上面的open()函数中添加了对按下open按钮响应的处理功能,即按下按钮后,打印出“HelloCvtech!”这句话到主界面中。修改完成后保存,重新编译#make再次执行#./hello按下open按钮,结果如图:3.3将hello移植到JXARM9-2410实验箱上3.3.1重新生成修改Makefile 因为是要在实验箱上运行,那么编译器也必须是交叉编译,就需要新的Makefile文件。使用tmake产生Makefile,在PC的Linux终端中输入命令: #tmake–oM 修改Makefile文件如下:CC = /usr/local/arm/2.95.3/bin/arm-linux-gccCXX = /usr/local/arm/2.95.3/bin/arm-linux-g++QTDIR=/home/cvtech/jx2410/qt2410/arm/qtQPEDIR=/home/cvtech/jx2410/qt2410/arm/qtopiaCFLAGS = -pipe-Wall-W-O2-DNO_DEBUGCXXFLAGS=-pipe-DQWS-fno-exceptions-fno-rtti-Wall-W-O2-DNO_DEBUGINCPATH = -I$(QTDIR)/include-I$(QPEDIR)/includeLINK = /usr/local/arm/2.95.3/bin/arm-linux-g++LFLAGS = LIBS = $(SUBLIBS)-L$(QTDIR)/lib-L$(QPEDIR)/lib-L/usr/local/arm/2.95.3/lib-lqte-lqpe-lqtopia-lmMOC = $(QTDIR)/bin/mocUIC = $(QTDIR)/bin/uicTAR = tar-cfGZIP = gzip-9f#######FilesHEADERS= hello.hSOURCES= hello.cpp\ main.cppOBJECTS= hello.o\ main.oINTERFACES= UICDECLS= UICIMPLS= SRCMOC = moc_hello.cppOBJMOC = moc_hello.oDIST = TARGET = helloINTERFACE_DECL_PATH=.#######Implicitrules.SUFFIXES:.cpp.cxx.cc.C.c.cpp.o: $(CXX)-c$(CXXFLAGS)$(INCPATH)-o$$<.cxx.o: $(CXX)-c$(CXXFLAGS)$(INCPATH)-o$$<.cc.o: $(CXX)-c$(CXXFLAGS)$(INCPATH)-o$$<.C.o: $(CXX)-c$(CXXFLAGS)$(INCPATH)-o$$<.c.o: $(CC)-c$(CFLAGS)$(INCPATH)-o$$<#######Buildrulesall:$(TARGET)$(TARGET):$(UICDECLS)$(OBJECTS)$(OBJMOC) $(LINK)$(LFLAGS)-o$(TARGET)$(OBJECTS)$(OBJMOC)$(LIBS)moc:$(SRCMOC)tmake:MakefileMakefile: -oMakefiledist: $(TAR)$(SOURCES)$(HEADERS)$(INTERFACES)$(DIST) $(GZIP)hello.tarclean: -rm-f$(OBJECTS)$(OBJMOC)$(SRCMOC)$(UICIMPLS)$(UICDECLS)$(TARGET) -rm-f*~core#######Sub-libraries######Combinedheaders#######Compilehello.o:hello.cpp\ hello.hmain.o:main

温馨提示

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

评论

0/150

提交评论