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

下载本文档

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

文档简介

1、目录第一章 LINUX 图形用户界面 GUI介绍 21.1 常用 GUI 介绍 21.2 关于 QT 31.3 QT/EMBEDDE简D 介 4第二章 QT 的安装 52.1 设置环境变量 62.2 使用脚本 ARM- BUILD 编译 QT 7第三章 QT 的编程 73.1 QT/EMBEDDED开 发一个嵌入式应用的过程 73.2 “HELLO”QT 的初探 73.2.1 建立工程文件 73.2.2 产生源代码 123.2.3 添加 main.cpp 文件 133.2.4 修改 文件 133.2.5 生成 MakeFile 文件 143.2.6 修改 hello.cpp

2、 文件 153.3 将 HELLO 移植到 JXARM9-2410实验箱上 193.3.1 重新生成修改 Makefile 193.3.2 制作启动器 223.3.3 重新生成 cramfs 文件 233.3.4 烧写重新生成的 cramfs 文件到 JXARM9-2410实验箱 23第一章 Linux 图形用户界面 GUI 介绍所谓 GUI(Graphics User Interface) 就是图形用户界面。图形用户界面的广 泛流行时当今计算机技术的重大成就之一,它极大的方便了非专业用户的使用, 人们不需要死记硬背大量的命令,而可以通过窗口,菜单方便的操作。随着手持式设备的硬件条件的提高,

3、嵌入式系统对轻量级 GUI 的需求越来越 迫切。近来的市场需求显示, 越来越多的嵌入式系统, 包括 PDA、机顶盒、DVD/VCD 播放机、 WAP手 机等等系统均要求提供全功能的 Web浏览器。这包括 HTML 4.0 的支持、 JavaScript 的支持,甚至包括 Java 虚拟机的支持。而这一切均要求有 一个高性能、 高可靠的 GUI的支持。 另外,在工业实时控制系统中对 GUI 的要求 也越来越高。目前许多这类系统采用比较简单的手法实现GUI。但是,在出现Linux 系统之后,许多工业控制系统开始采用 Linux 作为操作系统,并在其上加 入 GUI 实现。嵌入式 GUI就是在嵌入式

4、系统中为特定的硬件设备或环境而设计的图形用户 界面系统。所以嵌入式 GUI 在实际应用中,有如下基本要求:轻型,占用源少高性能高可靠性可配置1.1 常用 GUI 介绍1. Linux 下的 GUI X WindowX Window是 Linux 以及其他类 UNIX系统的标准 GUI。 X Window系统采用标 准的客户 / 服务器体系结构,具有可扩展性好、可移植性好等优点。但该系统的 庞大、累赘和低效率也是大家所共知的。为了获得应用程序的可移植性,许多厂家都试图通过对 X Window系统的紧 缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为 800K 的 X 服务器。这对西方

5、国家来说基本能够满足嵌入式系统的需求了。 但该系统的源代 码尚不开放,从而很难进行本地化开发。2. Linux 下的 GUI MicroWindowsMicroWindows 是一个开放源码的项目, 目前由美国一家公司在主持开发。 该 项目的开发非常活跃,国也有人参与了其中的开发,并编写了GB2312等字符集的支持。该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能, 比如 Alpha 混合,三维支持, TrueType 字体支持等。但作为一个窗口系统,该 项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完 备,键盘和鼠标等的驱动还很不完善。3. Linux 下

6、的 GUI OpenGUIOpenGUI在 Linux 系统上存在已经很长时间了。最初的名字叫 FastGL,只支 持 256 的线性显存模式。但目前也支持其他显示模式。这个库是用C+编写的,只提供 C+接口。4. Linux 下的 GUI MiniGUIMiniGUI 是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它 主要运行于 Linux 控制台,实际可以运行在任何一种具有 POSIX 线程支持的 POSIX兼容系统上。MiniGUI 同时也是国最早出现的几个自由软件项目之一。是由中国人开发的 GUI。5. Linux 下的 GUI QT/EmbeddedQT/Embedded是

7、著名的 QT库开放商正在进行的面向嵌入式系统的 QT版本。 这个版本的主要特点是可移植性较好, 许多基于 QT的 X Window程序可以非常方 便地移植到嵌入式版本。 但是该系统不是开放源码的, 如果你要使用这个库, 可 能需要支付昂贵的授权费用。1.2 关于 QtQt 是 Trolltech 公司的一个标志性产品。 Trolltech 公司 1994 年成立于 挪威,但是公司的核心开发团队已经在 1992 年开始了 Qt产品的研发,并于 1995 年推出了 Qt 的第一个商业版,直到现在 Qt 已经被世界各地的跨平台软件开发 人员使用,而 Qt 的功能也得到了不断的完善和提高。Qt 是一个

8、支持多操作系统平台的应用程序开发框架,它的开发语言是C+。Qt 最初主要是为跨平台的软件开发者提供统一的,精美的图形用户编程接 口,但是现在它也提供了统一的网络和数据库操作的编程接口。 正如微软当年为 操作系统提供了友好,精致的用户界面一样,今天由于 Trolltech 的跨平台开 发框架 Qt 的出现,也使得 UNIX、LINUX 这些操作系统以更加方便、 精美的人机 界面走近普通用户。Qt 是以工具开发包的形式提供给开发者的, 这些工具开发包包括了图形设计 器, Makefile 制作工具,字体国际化工具, Qt 的 C+类库等等。 Qt 的类库也是 等价于 MFC 的开发库,但是 Qt

9、的类库是支持跨平台的类库Qt 支持的操作系统平台: MS/Windows 95、Windows 98、WindowsNT4 .0 、 Windows 2000、Windows XP Unix/X11 Linux 、 Sun Solaris 、HP-UX、Compaq True64Unix、IBM AIX 、 SGI IRIX 和很多其它 X11 平台 Macintoshi Mac OSX 嵌入式的,包含有 FramBuffer 的 Linux 平台1.3 Qt/Embedded 简介Qt/Embedded 是一个为嵌入式设备上的图形用户接口和应用开发而订做的 C 工具开发包 . 它通常可以运行

10、在多种不同的处理器上部署的嵌入式 Linux 操作系统上除了类库以外, Qt/Embedded 还包括了几个提高开发速度的工具,使用标准 的 Qt API, 我们可以非常熟练的在 Windows和 Unix 编程环境里开发应用程序。Qt/Embedded 是一组用于访问嵌入式设备的 Qt C+ API ;Qt/Embedded 的 Qt/X11, Qt/Windows 和 Qt/Mac 版本提供的都是相同的 API和工具。Qt/Embedded 还包括类库以及支持嵌入式开发的工具。Qt/Embedded提供了一种类型安全的被称之为信号与插槽的真正的组件化编 程机制,这种机制和以前的回调函数有所

11、不同。 Qt/Embedded 还提供了一个通 用的 widgets 类,这个类可以很容易的被子类化为客户自己的组件或是对话框。 针对一些通用的任务, Qt 还预先为客户定制了像消息框和向导这样的对话框。Qt/Embedded包括了它自身的窗口系统,并支持多种不同的输入设备。Qt的图形设计器 (designer) 可以用来可视化地设计用户接口, 设计器中有一 个布局系统,它可以使你设计的窗口和组件自动根据屏幕空间的大小而改变布 局。开发者可以选择一个预定义的视觉风格, 或是建立自已独特的视觉风格。 使 用 UNIX/LINUX 操作系统的用户,可以在工作站上通过一个虚拟缓冲帧的应用程 序仿真嵌

12、入式系统的显示终端。Qt/Embedded也提供了许多特定用途的非图形组件,例如国际化,网络和数 据库交互组件。Qt/Embedded是成熟可靠的工具开发包,它在世界各地被广泛使用。除了在 商业上的许多应用以外, Qt/Embedded还是为小型设备提供的 Qtopia 应用环境 的基础。Qt/Embedded以简洁的系统,可视化的表单设计和详致的 API 让编写代码变 得愉快和舒畅。第二章 Qt 的安装一般来说, 居于 Qt/Embedded 开发的应用程序最终会发布到安装有嵌入式 Linux 操作系统的小型设备上。需要的软件包:tmake 工具安装包(生成 Qt/Embedded应用工程的

13、 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/X1

14、1R6/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 的空

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

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

17、 OK 按钮, 结果如下:设置 Form1的属性,修改“name”为 hello ,修改“caption ”为 Hello Cvtech 。然后添加两个按钮, 分别修改“ name”分别为 obutton 和 cbutton ,修改“ text ”分别为 open 和 close 。然后在添加一个 text 图标,修改“ name”为 Tlabel ,修改“ text ”为空 设置完成后,如图:完成以上工作后, 我们需要添加函数, 使按钮能够对其进行响应, 方法如下: 选择工具栏中的 Edit >slot ,新建两个函数, 分别为 open() 和 close (), 如图所示:面的操作

18、涉及到了 QT中的信号和槽的概念, 我的理解按钮的操作时信号槽就是该操作所响应的函数。如下图所示,完成 open 按钮和 close 按钮的。 首先点击按钮,然后点住 open 按钮不要松开,向上拉动到 Form1 的空白地 方,如图:同样的方法建立 close 按钮的响应关联,如图:然后在 Edit >slot 中去除 close ()函数,如图:完成以上操作后,保存图形文件,点击工具栏 File > save ,如图:然后退出设计器。注意:每次修改 *.ui 的工程文件后, 必须使用下面的方法重新生成源码, 否 则会出现编译出错的情况。3.2.2 产生源代码在 PC的 Linu

19、x 的终端中,输入命令如下:# /home/cvtech/jx2410/qt2410/arm/qt/bin/uicohello.hhello.ui# /home/cvtech/jx2410/qt2410/arm/qt/bin/uico hello.cpp -implhello.h hello.ui3.2.3 添加 main.cpp 文件在 PC的 Linux 的终端中,输入命令如下:# vi main.cpp 代码如下所示: #include "hello.h" #include <qapplication.h>#define QT_NO_WIZARDint m

20、ain(int argc, char *argv) QApplication a(argc,argv); hello dlg; a.setMainWidget(&dlg); dlg.show();return a.exec();3.2.4 修改 文件在 PC的 Linux 的终端中,输入命令如下:# vi 修改容如下: TEMPLATE = appCONFIG = qt warn_on releaseHEADERS= hello.hSOURCES= hello.cpp main.cppINTERFACE=S3.2.5 生成 MakeFile 文件

21、在 PC的 Linux 的终端中,输入命令如下:# qmake 此时得到的 Makefile 文件编译出来的 hello ,是在 PC 的 Linux 上可以运 行的。# make得到可执行文件 hello ,在 PC的 Linux 的终端中,输入命令如下:# ./hello得到界面如下:3.2.6 修改 hello.cpp 文件为了实现前面讲到的按下 open 按钮,出现“ hello cvtech ”的打印信息, 我们还需要修改 文件,以下为源码容:/* Form implementation generated from reading ui fil

22、e '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!*/ #include "hello.h"#include <qlabel.h>#include <qpushbutton.h>#include <qlayout.h>#include <qvariant.h>#include <

23、;qtooltip.h>#include <qwhatsthis.h>/*Constructs a hello which is a child of 'parent', with thename 'name' and widget flags set to 'f'The dialog will by default be modeless, unless you set 'modal' toTRUE to construct a modal dialog.hello:hello( QWidget* parent

24、, 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 ) ); cButto

25、n->setText( tr( "close" ) );oButton = 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

26、TLabel font( TLabel->font() );TLabel font.setPointSize( 30 );TLabel->setFont( TLabel font );TLabel->setText( tr( "" ) );/ signals and slots connectionsconnect( oButton, SIGNAL( clicked() ), this, SLOT( open() ) ); connect( cButton, SIGNAL( clicked() ), this, SLOT( close() ) );/*De

27、stroys the object and frees any allocated resourceshello:hello()/ no need to delete child widgets, Qt does it all for us /* Main event handler. Reimplemented to handle application* font changesbool hello:event( QEvent* ev )bool ret = QDialog:event( ev );if ( ev->type() = QEvent:ApplicationFontCha

28、nge ) QFont TLabel font( TLabel->font() );TLabel_font.setPointSize( 30 );TLabel->setFont( TLabel_font );void hello:open()TextLabel1->setText(tr("Hello Cvtech!"); /qWarning( "hello:open(): Not implemented yet!" );在上面的 open()函数中添加了对按下 open 按钮响应的处理功能,即按下 按钮后,打印出“ Hello Cvte

29、ch !”这句话到主界面中。修改完成后保存,重新 编译# make再次执行 # ./hello 按下 open 按钮,结果如图:3.3 将 hello 移植到 JXARM9-2410实验箱上3.3.1 重新生成修改 Makefile因为是要在实验箱上运行,那么编译器也必须是交叉编译,就需要新的Makefile 文件。使用 tmake 产生 Makefile ,在 PC的 Linux 终端中输入命令:# tmake o Makefile 修改 Makefile 文件如下:CC = /usr/local/arm/2.95.3/bin/arm-linux-gccCXX= /usr/

30、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

31、.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 =h ello.hSOURCES =h ello.cpp main.cppOBJECTS = hello.o main.oINTERFACES = UICDECLS =

32、UICIMPLS = SRCMOC = moc hello.cpp OBJMOC = moc hello.o DIST = TARGET = hello INTERFACE_DECL_PATH = .# Implicit rules .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.

33、o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $<.c.o:$(CC) -c $(CFLAGS) $(INCPATH) -o $ $<# Build rules all: $(TARGET)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)moc: $(SRCMOC)tmake: MakefileMakefile: tmake -o Makefiledist:

34、$(TAR) hello.tar $(SOURCES) $(HEADERS) $(INTERFACES)$(DIST)$(GZIP) hello.tarclean:-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)-rm -f * core# Sub-libraries# Combined 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_h

温馨提示

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

评论

0/150

提交评论