Qt程序开发完全手册范本.doc

上传人:牧羊曲112 文档编号:4197264 上传时间:2023-04-09 格式:DOC 页数:24 大小:482.50KB
返回 下载 相关 举报
Qt程序开发完全手册范本.doc_第1页
第1页 / 共24页
Qt程序开发完全手册范本.doc_第2页
第2页 / 共24页
Qt程序开发完全手册范本.doc_第3页
第3页 / 共24页
Qt程序开发完全手册范本.doc_第4页
第4页 / 共24页
Qt程序开发完全手册范本.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Qt程序开发完全手册范本.doc》由会员分享,可在线阅读,更多相关《Qt程序开发完全手册范本.doc(24页珍藏版)》请在三一办公上搜索。

1、目 录第一章 LINUX图形用户界面GUI介绍21.1常用GUI介绍21.2关于Qt31.3 Qt/Embedded简介4第二章 QT的安装52.1设置环境变量62.2 使用脚本arm-build 编译Qt7第三章 QT的编程73.1 Qt/Embedded 开发一个嵌入式应用的过程73.2 “hello”Qt的初探73.2.1 建立工程文件73.2.2 产生源代码123.2.3 添加main.cpp文件123.2.4修改hello.pro文件133.2.5 生成 MakeFile 文件143.2.6 修改 hello.cpp 文件153.3 将hello 移植到JXARM9-2410实验箱上

2、183.3.1 重新生成修改 Makefile183.3.2 制作启动器223.3.3 重新生成cramfs文件233.3.4 烧写重新生成的cramfs文件到JXARM9-2410实验箱23第一章 Linux图形用户界面GUI介绍所谓GUI(Graphics User Interface)就是图形用户界面。图形用户界面的广泛流行时当今计算机技术的重大成就之一,它极大的方便了非专业用户的使用,人们不需要死记硬背大量的命令,而可以通过窗口,菜单方便的操作。随着手持式设备的硬件条件的提高,嵌入式系统对轻量级GUI的需求越来越迫切。近来的市场需求显示,越来越多的嵌入式系统,包括PDA、机顶盒、DVD

3、/VCD播放机、WAP 手机等等系统均要求提供全功能的Web浏览器。这包括HTML 4.0的支持、JavaScript的支持,甚至包括Java虚拟机的支持。而这一切均要求有一个高性能、高可靠的GUI的支持。另外,在工业实时控制系统中对GUI的要求也越来越高。目前许多这类系统采用比较简单的手法实现GUI。但是,在出现Linux系统之后,许多工业控制系统开始采用Linux作为操作系统,并在其上加入GUI实现。嵌入式GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。所以嵌入式GUI在实际应用中,有如下基本要求:u 轻型,占用源少u 高性能u 高可靠性u 可配置1.1常用GUI介

4、绍1.Linux下的GUI X WindowX Window是Linux以及其他类UNIX系统的标准GUI。X Window系统采用标准的客户/服务器体系结构,具有可扩展性好、可移植性好等优点。但该系统的庞大、累赘和低效率也是大家所共知的。为了获得应用程序的可移植性,许多厂家都试图通过对X Window系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为800K的X服务器。这对西方国家来说基本能够满足嵌入式系统的需求了。但该系统的源代码尚不开放,从而很难进行本地化开发。2.Linux下的GUI MicroWindowsMicroWindows是一个开放源码的项目,目前由美国一家

5、公司在主持开发。该项目的开发非常活跃,国也有人参与了其中的开发,并编写了GB2312等字符集的支持。该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能,比如Alpha混合,三维支持,TrueType字体支持等。但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等的驱动还很不完善。3.Linux下的GUI OpenGUIOpenGUI在Linux系统上存在已经很长时间了。最初的名字叫FastGL,只支持256的线性显存模式。但目前也支持其他显示模式。这个库是用C+编写的,只提供C+接口。4.Linux下的GUI MiniGUIM

6、iniGUI是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上。MiniGUI同时也是国最早出现的几个自由软件项目之一。是由中国人开发的GUI。5.Linux下的GUI QT/EmbeddedQT/Embedded是著名的QT库开放商正在进行的面向嵌入式系统的QT版本。这个版本的主要特点是可移植性较好,许多基于QT的X Window程序可以非常方便地移植到嵌入式版本。但是该系统不是开放源码的,如果你要使用这个库,可能需要支付昂贵的授权费用。1.2关于QtQt 是 Trolltech 公司的一个

7、标志性产品。Trolltech 公司 1994 年成立于挪威,但是公司的核心开发团队已经在 1992年开始了Qt产品的研发,并于 1995年推出了Qt的第一个商业版,直到现在Qt 已经被世界各地的跨平台软件开发人员使用,而 Qt 的功能也得到了不断的完善和提高。Qt 是一个支持多操作系统平台的应用程序开发框架,它的开发语言是 C+。Qt 最初主要是为跨平台的软件开发者提供统一的,精美的图形用户编程接口,但是现在它也提供了统一的网络和数据库操作的编程接口。正如微软当年为操作系统提供了友好,精致的用户界面一样,今天由于 Trolltech 的跨平台开发框架Qt 的出现,也使得UNIX、LINUX

8、这些操作系统以更加方便、精美的人机界面走近普通用户。Qt 是以工具开发包的形式提供给开发者的,这些工具开发包包括了图形设计器,Makefile制作工具,字体国际化工具,Qt的C+类库等等。Qt 的类库也是等价于 MFC 的开发库,但是 Qt 的类库是支持跨平台的类库Qt支持的操作系统平台: MS/Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP Unix/X11 Linux、Sun Solaris、HP-UX、Compaq True64Unix、IBM AIX、SGI IRIX和很多其它 X11平台 Macintoshi M

9、ac OSX 嵌入式的,包含有FramBuffer的 Linux平台1.3 Qt/Embedded简介Qt/Embedded 是一个为嵌入式设备上的图形用户接口和应用开发而订做的C工具开发包. 它通常可以运行在多种不同的处理器上部署的嵌入式Linux操作系统上除了类库以外,Qt/Embedded还包括了几个提高开发速度的工具,使用标准的Qt API,我们可以非常熟练的在Windows和Unix编程环境里开发应用程序。Qt/Embedded 是一组用于访问嵌入式设备的 Qt C+ API;Qt/Embedded 的Qt/X11, Qt/Windows 和Qt/Mac版本提供的都是相同的API和工

10、具。Qt/Embedded还包括类库以及支持嵌入式开发的工具。Qt/Embedded提供了一种类型安全的被称之为信号与插槽的真正的组件化编程机制,这种机制和以前的回调函数有所不同。 Qt/Embedded还提供了一个通用的widgets类,这个类可以很容易的被子类化为客户自己的组件或是对话框。针对一些通用的任务,Qt还预先为客户定制了像消息框和向导这样的对话框。Qt/Embedded包括了它自身的窗口系统,并支持多种不同的输入设备。Qt的图形设计器(designer)可以用来可视化地设计用户接口,设计器中有一个布局系统,它可以使你设计的窗口和组件自动根据屏幕空间的大小而改变布局。开发者可以选择

11、一个预定义的视觉风格,或是建立自已独特的视觉风格。使用UNIX/LINUX操作系统的用户,可以在工作站上通过一个虚拟缓冲帧的应用程序仿真嵌入式系统的显示终端。 Qt/Embedded也提供了许多特定用途的非图形组件,例如国际化,网络和数据库交互组件。 Qt/Embedded是成熟可靠的工具开发包,它在世界各地被广泛使用。除了在商业上的许多应用以外,Qt/Embedded还是为小型设备提供的Qtopia应用环境的基础。Qt/Embedded以简洁的系统,可视化的表单设计和详致的API让编写代码变得愉快和舒畅。第二章 Qt的安装一般来说, 居于Qt/Embedded开发的应用程序最终会发布到安装有

12、嵌入式Linux操作系统的小型设备上。需要的软件包:u tmake工具安装包(生成Qt/Embedded应用工程的Makefile文件)u Qt/Embedded 安装包(Qt/Embedded 安装包)u 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/

13、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,然后是完全安装的,RedHa

14、t9.0完全安装大概需要4.8G的空间,如果不完全安装会导致编译出错,原因是缺少必要的库导致的。第三章 Qt的编程3.1 Qt/Embedded 开发一个嵌入式应用的过程q 选定嵌入式硬件平台q 在工作的机器上安装 Qt/Embedded工具开发包q 根据目标硬件平台,交叉编译 Qt/Embedded 的库 q 在工作的机器上进行应用程序的编码,调试q 根据目标硬件平台,交叉编译嵌入式应用q 在嵌入式硬件设备上调试运行应用q 发布嵌入式应用3.2 “hello”Qt的初探第一次Qt程序实现一个功能,就是按下我们设置的user按钮后,显示出“hello cvtech”的打印信息,按下close按

15、钮后,退出该应用程序。3.2.1 建立工程文件在PC的Linux的“/home/cvtech/jx2410/examples/qt/”目录下新建一个名为:“hello”的目录,命令如下:# cd /home/cvtech/jx2410/examples/qt/# mkdir hello建立工程文件hello.pro,命令如下:# progen t app.t o hello.pro在后台启动QT的设计器,命令如下: # /home/cvtech/jx2410/qt2410/arm/qt/bin/designer &新建项目文件,选择工具栏File new Dialog ,然后点击OK 按钮,结

16、果如下:设置Form1的属性,修改“name” 为 hello,修改“caption”为 Hello Cvtech。然后添加两个按钮, 分别修改“name”分别为 obutton 和 cbutton,修改 “text”分别为open 和 close。然后在添加一个text图标,修改“name”为 Tlabel,修改“text”为空。设置完成后,如图:完成以上工作后,我们需要添加函数,使按钮能够对其进行响应,方法如下:选择工具栏中的 Edit slot,新建两个函数,分别为 open() 和 close(),如图所示:下面的操作涉及到了QT中的信号和槽的概念,我的理解按钮的操作时信号,槽就是该操

17、作所响应的函数。如下图所示,完成open 按钮和 close按钮的。首先点击按钮,然后点住open按钮不要松开,向上拉动到Form1的空白地方,如图:同样的方法建立close按钮的响应关联,如图:然后在Edit slot 中去除 close()函数,如图:完成以上操作后,保存图形文件,点击工具栏File save,如图:然后退出设计器。注意:每次修改*.ui的工程文件后,必须使用下面的方法重新生成源码,否则会出现编译出错的情况。3.2.2 产生源代码在PC的Linux的终端中,输入命令如下:# /home/cvtech/jx2410/qt2410/arm/qt/bin/uic o hello.

18、h hello.ui# /home/cvtech/jx2410/qt2410/arm/qt/bin/uic o hello.cpp -impl hello.h hello.ui3.2.3 添加main.cpp文件在PC的Linux的终端中,输入命令如下:# vi main.cpp代码如下所示:#include hello.h#include #define QT_NO_WIZARDint main(int argc, char *argv)QApplication a(argc,argv);hello dlg;a.setMainWidget(&dlg);dlg.show();return a.

19、exec();3.2.4修改hello.pro文件在PC的Linux的终端中,输入命令如下:# vi hello.pro修改容如下:TEMPLATE= appCONFIG= qt warn_on releaseHEADERS= hello.h SOURCES= hello.cpp main.cppINTERFACES=3.2.5 生成 MakeFile 文件在PC的Linux的终端中,输入命令如下:# qmake hello.pro此时得到的Makefile 文件编译出来的 hello,是在PC 的Linux 上可以运行的。# make得到可执行文件 hello ,在PC的Linux的终端中,

20、输入命令如下:# ./hello得到界面如下:3.2.6 修改 hello.cpp 文件为了实现前面讲到的按下open按钮,出现“hello cvtech”的打印信息,我们还需要修改hello.pro文件,以下为源码容:/* Form implementation generated from reading ui file hello.ui* Created: Thu Nov 12 10:38:17 2009* by: The User Interface Compiler (uic)* WARNING! All changes made in this file will be lost!

21、*/#include hello.h#include #include #include #include #include #include /* * Constructs a hello which is a child of parent, with the * name name and widget flags set to f * * The dialog will by default be modeless, unless you set modal to * TRUE to construct a modal dialog. */hello:hello( QWidget* p

22、arent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) if ( !name )setName( hello ); resize( 312, 280 ); setCaption( tr( Hello Cvtech ) ); cButton = new QPushButton( this, cButton ); cButton-setGeometry( QRect( 180, 190, 91, 31 ) ); cButton-setText( tr( close ) ); oBut

23、ton = new QPushButton( this, oButton ); oButton-setGeometry( QRect( 40, 190, 91, 31 ) ); oButton-setText( tr( open ) ); TLabel = new QLabel( this, TLabel ); TLabel-setGeometry( QRect( 30, 60, 250, 51 ) ); QFont TLabel_font( TLabel-font() ); TLabel_font.setPointSize( 30 ); TLabel-setFont( TLabel_font

24、 ); TLabel-setText( tr( ) ); / signals and slots connections connect( oButton, SIGNAL( clicked() ), this, SLOT( open() ) ); connect( cButton, SIGNAL( clicked() ), this, SLOT( close() ) );/* * Destroys the object and frees any allocated resources */hello:hello() / no need to delete child widgets, Qt

25、does it all for us/* * Main event handler. Reimplemented to handle application * font changes */bool hello:event( QEvent* ev ) bool ret = QDialog:event( ev ); if ( ev-type() = QEvent:ApplicationFontChange ) QFont TLabel_font( TLabel-font() );TLabel_font.setPointSize( 30 );TLabel-setFont( TLabel_font

26、 ); return ret;void hello:open() TextLabel1-setText(tr(Hello Cvtech!); /qWarning( hello:open(): Not implemented yet! );在上面的open()函数中添加了对按下open按钮响应的处理功能,即按下按钮后,打印出“Hello Cvtech!”这句话到主界面中。修改完成后保存,重新编译# make 再次执行# ./hello 按下open按钮,结果如图:3.3 将hello 移植到JXARM9-2410实验箱上3.3.1 重新生成修改 Makefile因为是要在实验箱上运行,那么编译器

27、也必须是交叉编译,就需要新的Makefile文件。使用tmake 产生 Makefile,在PC的Linux终端中输入命令:# tmake o Makefile hello.pro修改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 -O

28、2 -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/mocUI

29、C=$(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 = .# Implicit rules.SUFFIXES: .cpp .cxx .cc .C .c.cpp.o:$(CXX) -c $(CXXFLAGS)

30、$(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 $ $# Build rulesall: $(TARGET)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(LINK) $(LFLAGS) -o $(TARGET) $(OBJ

31、ECTS) $(OBJMOC) $(LIBS)moc: $(SRCMOC)tmake: MakefileMakefile: hello.protmake hello.pro -o Makefiledist:$(TAR) hello.tar hello.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)$(GZIP) hello.tarclean:-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)-rm -f * core# Sub-libraries# Com

32、bined headers# Compilehello.o: hello.cpp hello.hmain.o: main.cpp hello.hmoc_hello.o: moc_hello.cpp hello.hmoc_hello.cpp: hello.h$(MOC) hello.h -o moc_hello.cpp修改完成后保存,重新编译# make,得到新的hello,这时候用 ./hello 是不能运行的,因为我们的编译器是arm的编译器。下面我们需要把我们得到的 hello 放到实验箱的QT中去运行。3.3.2 制作启动器注意:这里用到的QT的文件系统是光盘中flashupdate下的

33、prog.cramfs 文件。首先我们需要把它解压缩,在PC的Linux的命令如下:# cp /home/cvtech/jx2410/root/prog.cramfs /root# cd /root# mkdir qtc# mount -t cramfs -o loop prog.cramfs qtc# cp qtc qt -rf# cp qt /home/cvtech/jx2410/root -rf现在这个qt 目录就是我们需要修改的文件系统。# cd /home/cvtech/jx2410/root/qt 拷贝一个启动器,修改为我们需要的启动器,命令如图:# cd qtopia/apps/

34、Applications/# cp worldtime.desktop hello.desktop# chmod 777 *# vi hello.desktop修改 hello.pro 如下:Desktop EntryComment=Hello CvtechExec=helloIcon=CityTimeType=ApplicationName=Hello CvtechNameno=VerdensurNamede=Weltzeituhr保存以后,然后拷贝hello 到 应用程序文件夹,在PC的Linux的终端输入命令如下:# cd ././bin# cp /home/cvtech/jx2410/

35、examples/hello/hello .3.3.3 重新生成cramfs文件在PC的Linux的终端输入命令如下:# cd /home/cvtech/jx2410/root# ./mkfs.cramfs qt qtcramfs新生成的qtcramfs就是我们要烧写的QT文件。3.3.4 烧写重新生成的cramfs文件到JXARM9-2410实验箱将qtcramfs 拷到U 盘当中,然后将U盘插到实验箱的HOST1口。连接串口,启动实验箱的Linux操作系统,在终端中输入如下命令:$mount /dev/sda1/ /mnt/udisk$imagewrite /dev/mtd/4 -part 0$imagewrite /dev/mtd/4 /mnt/udisk/qtcramfs:0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号