现在的位置: 首页 > 综合 > 正文

Qt程序开发方法和流程

2013年02月01日 ⁄ 综合 ⁄ 共 5248字 ⁄ 字号 评论关闭

说明:只供学习交流,转载请注明出处

 

一,开发方法

在开发Qt4应用程序时,有几种常见的做法。

1.全部采用手写代码,在命令行下完成编译和运行

这种方式是最基础、最基本的,使用它的感觉有点像练武术时的扎马步,一招一式非常清楚。它最锻炼开发者的技能,因为每一步都不能含糊,开发者需要对编译系统、Qt基础知识有着非常扎实的了解。笔者熟知的许多的Qt编程的“老鸟”中,很多人都青睐这种方式。它的缺点是在一般规模的应用中,还足以胜任,但如果是大型的、多人参与的工程开

发和项目研制,它就有些不方便了,比如如何协同开发、如何进行版本控制管理等等问题都会变得难以解决。

 

2.在集成开发环境(IDE)中采用手写代码(包括设计界面),使用IDE完成编译和运行这种方式的好处是可以借助IDE来管理工程要素,摒弃了手工的方式,不必太关注工程文件中的一些细节,并且可以借助调试和图形化工具来快速开发;缺点是IDE并不是智能的无可挑剔,它替你完成的一些事情往往会不如你所愿,很多情况下,你还是需要命令行工具来辅助。

3.使用Qt Designer设计界面,使用IDE完成编译和运行

这种方式也很常见,开发者使用QtDesigner设计界面元素,然后把工程文件的生成、管理,程序的编译运行都交给IDE来处理。这种方式的好处可以方便快速的对界面进行修改,在界面元素需要经常变动的情况下,效率比较高;缺点是使用QtDesigner生成的代码量比较庞大,由于好多都是自动生成的,阅读代码和调试程序相对比较困难。

 

对于初学者而言,采用第3种方式最容易“入门”,但基础可能打得不太扎实,因为这些集成式的工具为开发者做了太多的事情,在它们形成的层层布幔之下,隐藏了Qt的核心

机制与原理,所以不太容易理解和掌握Qt编程的本质。所以呢,我向初学Qt的读者朋友推荐第1种方法,先一点一点的做起,待掌握了基础技能后,再快马加鞭也不迟。

 

二,开发Qt程序的基本流程

1.成功安装Qt4

2.正确配置环境变量(Windows环境通常不需要)

3.书写源代码

将下面的源代码保存至一个名为helloqt.cpp的文件,并把它放进一个名为helloqt的目录中,你可以使用任何一种文本编辑器完成此项工作,比如Windows平台的记事本,Linux下的vimMacOSX下的TextEdit

4.生成项目文件

在命令行下,进入helloqt目录,输入如下命令,生成一个与平台无关的项目文件helloqt.proqmake –project

5.生成makefile文件

然后输入如下命令,从这个项目文件生成一个与平台相关的makefile文件:qmake  helloqt.pro

6.运行make构建程序

X11以及Mac下,键入make

Windows上,如果使用的是开源版的Qt,键入mingw32-make.exe;如果使用的是商业版的Qt,则输入nmake

7.运行程序

Windows下,输入helloqt,并回车运行;在X11下,输入./helloqt;在Mac
OS X
下,输入open helloqt.app

8.结束程序

要结束该程序,可以直接单击窗口标题上的关闭按钮。

 

这就是Qt4程序编译运行的大致顺序,上面的这个流程主要是采用命令行方式进行的。如果你使用的是Qt的商业版和MicrosoftVisualC++作为开发环境,则需要使用nmake命令替代make命令。还可以通过.pro文件创建一个VisualC++工程文件,方法如下:

Qmake –project

Qmake –tpvchelloqt.pro

然后,就可以使用VisualC++打开生成的工程文件,继续完成编译运行的工作。

如果是在MacOSXXcode里面使用Qt,则可以打开命令行,输入如下命令来生成一个Xcode工程文件,继而完成后面的工作:

Qmake –specmacx -xcodehelloqt.pro

 

 

三,Hello Qt程序分析

本实例实现一个“HelloQt!”的例子,它是基于对话框的程序,界面上有一个按钮,上面的字符是“HelloQt!”,单击该按钮,对话框关闭,程序退出。

实现代码如下:

 #include<QApplication>

 #include<QPushButton>

 intmain(intargc,char *argv[])

 {

 QApplication app(argc,argv);

 QPushButton pushButton(QObject::tr("HelloQt!") );

 pushButton.show();

 QObject::connect(&pushButton,SIGNAL(clicked()),&app,SLOT(quit()));

 Returnapp.exec();

 }

1行包含了QApplication的定义。Qt的头文件中最为重要的两个是<QApplication><QCoreApplication>,你会经常看到它们。所有Qt
GUI
应用程序都需要包含<QApplication>这个文件,若使用的是非GUI应用程序,则需要包含<QCoreApplication>

 

Qt4中,对于每个Qt类,都有一个与该类同名并且采用大写形式的头文件,在这个头文件中包含了对该类的定义。

 

2行包含了按钮窗口部件的头文件。

Qt4中,头文件的包含可以采用类似于<QApplication><QPushButton>的形式,也可以使用<qapplication.h><qpushbutton.h>的形式。为什么这么说呢,以Windows上安装的Qt4.5为例,请进入你的安装路径下的include目录,我的是C:\Qt\2009.03\qt\include\QtGui,在这里你可以找到QApplicationqapplication.h,用记事本打开QApplication这个文件,你就会发现里面只有一行代码:#include
"qapplication.h"

 

3行创建了应用程序的入口,Qt程序以一个main()函数作为入口,它有argcargv两个参数。

5行创建了一个QApplication对象,用来管理整个应用程序所用到的资源。每个Qt程序都必须有且只有一个QApplication对象。这个QApplication构造函数需要argc

argv作为参数,以支持程序的命令行参数。

6行创建了一个QPushButton对象,它是一个窗口部件(widget),并把它的显示文本设置为“HelloQt!”。

 

QtUNIX术语中,窗口部件(widget)通常是指用户界面中的可视化元素,比如按钮、滚动条和菜单等都是窗口部件。该词起源于“windowgadget”这个词组,语义有些类似于Windows系统中的“控件”(control)的含义,但又不尽相同。

 

7行调用按钮对象的show()方法,将按钮显示出来。Qt4在创建窗口部件的时候,通常都是隐藏不显示的,可以调用show()方法来将它们显示出来。这种做法还有一个好处,就是我们可以先对窗口部件的属性等进行设置,然后再显示出来,从而防止闪烁现象的出现。

8行使用了Qt的信号/槽机制。这一机制是这样运作的,Qt的窗口部件可以通过发射信号(signal)来通知应用程序,某个用户动作已经发生或者是窗口部件的某种状态发生了变化,应用程序通过一个称为槽(slot)的函数来做出回应和处理。以我们这个程序为例,当用户使用鼠标左键单击那个“HelloQt!”按钮时,该按钮就会发射一个clicked()信号,根据我们的设置,QApplication对象的quit()槽负责响应这个信号,它执行退出应用程序的操作。

 

9行调用QApplicationexec()方法,程序进入事件循环,等待用户的动作并适时做出响应,这里的响应通常就是执行槽函数。Qt完成事件处理及显示的工作后,退出应用程序,并返回exec()的值。

 

编译运行

依次点击【开始】→【所有程序】→【QtSDKbyNokiav2009.03(opensource)】→

QtCommandPrompt】,启动Qt命令行,如下图所示,每次启动时,命令行会自动为我们配置好Qt所需的环境。

 

接下来切换到你保存的程序文件目录,接下来输入qmakeproject,生成项目文件,再输入dir查看,发现生成的项目文

件名为helloqt.pro

 

然后输入qmakehelloqt.pro,生成makefile文件。

这之后再输入mingw32-make.exe,开始编译程序,编译完成后将在debug目录下生成一个名为helloqt.exe的可执行文件进入debug目录,输入helloqt回车运行即可。

 

 

四,几个重要的知识点

1.关于信号/

信号/槽提供了任意两个对象间通信的机制,是Qt区别于其它GUI库的最重要的特征之一。传统的GUI库往往采用回调函数来实现对象间的通信,而Qt的信号/槽机制要更简单灵活。每个Qt对象都包含特定的信号和槽以及相应的关联定义,当有事件发生或是对象的状态发生改变时,对应的信号就被发射出来,与其相关联的槽被执行以响应该信号,完成处理工作。

信号与槽通常采用如下连接方式:

connect(Object1,SIGNAL(signal),Object2,SLOT(slot));

式中,Object1Object2是两个对象,signalObject1发出的信号,slot是用来响应signal信号的槽,它属于Object2SIGNAL()SLOT()是两个宏,它们是Qt语法中的一部分。

 

2.构建Qt应用程序的的流程

在构建Qt应用程序时,无论你是采用手写代码,还是使用Qt Designer设计界面,都会遵循这个一般的顺序,就是先声明所需使用的窗口部件,接下来设置它们的属性,然后再

把这些窗口部件添加到布局中,布局会自动设置它们的位置和大小。接下来根据Qt的信号/槽原理,创建并连接使用到的信号和槽,通过窗口部件之间的通信就可以管理用户的交互行为。最后就是程序的编译、链接和运行,基本的顺序是qmakeproject,qmakexxx.pro,make(具体的make命令与平台相关),然后运行你的程序。

 

3.编译Qt应用程序的方法

我们可以选择3种方式来编译Qt应用程序:

⑴使用qmake

这是最常用的方式,qmake最为重要的作用是生成与平台关的.pro文件,并以此来生成与平台相关的makefile

⑵使用集成开发环境

本质上使用IDE也是在使用qmake

⑶使用第三方的编译工具

从理论上来说,任何第三方编译工具都可以用于Qt的应用程序开发中,但使用可以感知QtQt-aware)的工具会比较容易一些。常见的第三方编译工具有CMakeBoost.Build

Scons等。它们的使用相对比较复杂,不推荐初学者使用。

 

4.qmake工程文件的结构

这里我们看一下Qt Creator为我们生成的helloqt.pro这个工程文件的内容。

1#-------------------------------------------------2 #

3 # ProjectcreatedbyQtCreator2009-08-16T22:31:08

4 #

5#-------------------------------------------------6 TARGET=helloqt

7 TEMPLATE= app

8 SOURCES+=main.cpp\

widget.cpp

9 HEADERS +=widget.h

10 FORMS +=widget.ui

5行,也就是用#号打头的内容是qmake工具自动添加注释,这里它解释了改工程文件是使用Qt
Creator
创建的以及创建的时间。变量TARGET描述了目标工程文件的名称,通常就是生成的应用程序的名字。

变量TEMPLATE描述了生成何种形式的makefile文件,有5种常见的模板:

app建立一个Qt应用程序的makefile

lib建立一个Qt应用库的makefile

subdirs建立一个子目录下目标文件的makefile,子目录通过变量SUBDIRS指定(子目录下若有工程文件也需要指出类型)

vcappVisual Studio生成一个工程,可在Windows操作系统上使用

vclibVisual Studio生成库工程,可在Windows操作系统上使用

变量SOURCES选项告诉编译器,源代码文件的相对于工程文件helloqt.pro的位置以

及文件名字,本程序包含两个.cpp文件,中间用\隔开。

同理,变量HEADERS告诉编译器头文件的路径,变量FORMS告诉编译器.ui文件的路径。

有了上面这些信息,编译系统就知道该如何编译与平台相关的makefile文件了。

 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.