6.3 几个重要的知识点

1.关于信号/槽

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

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

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

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

关于信号/槽的深入内容,我们会在第 13 章为大家详细讲解。 2.构建 Qt 应用程序的的流程在构建 Qt 应用程序时,无论你是采用手写代码,还是使用 Qt Designer 设计界面,都会遵循这个一般的顺序,就是先声明所需使用的窗口部件,接下来设置它们的属性,然后再把这些窗口部件添加到布局中,布局会自动设置它们的位置和大小。接下来根据 Qt 的信号/槽原理,创建并连接使用到的信号和槽,通过窗口部件之间的通信就可以管理用户的交互 行为。最后就是程序的编译、链接和运行,基本的顺序是 qmake –project,qmake xxx.pro,make(具体的 make 命令与平台相关),然后运行你的程序。

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

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

(1) 使用 qmake

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

(2) 使用集成开发环境

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

(3) 使用第三方的编译工具

从理论上来说,任何第三方编译工具都可以用于 Qt 的应用程序开发中,但使用可以感 知 Qt(Qt-aware)的工具会比较容易一些。常见的第三方编译工具有 CMake、Boost.Build 和 Scons 等。它们的使用相对比较复杂,不推荐初学者使用。

4.qmake 工程文件的结构

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

#-------------------------------------------------
#
# Project created by QtCreator 2009-08-16T22:31:08
#
#-------------------------------------------------
TARGET = helloqt
TEMPLATE = app
SOURCES += main.cpp\
widget.cpp
HEADERS += widget.h
FORMS += widget.ui

前 5 行,也就是用#号打头的内容是 qmake 工具自动添加的注释,这里它解释了改工程文件是使用 Qt Creator 创建的以及创建的时间。

变量 TARGET 描述了目标工程文件的名称,通常就是生成的应用程序的名字。

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

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

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

vcapp 为 Visual Studio 生成一个工程,可在 Windows 操作系统上使用 vclib 为 Visual Studio 生成库工程,可在 Windows 操作系统上使用

变量 SOURCES 选项告诉编译器,源代码文件的相对于工程文件 helloqt.pro 的位置以 及文件名字,本程序包含两个.cpp 文件,中间用\隔开。

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

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

qmake 的语法很丰富,常用的一些我们会根据应用程序的情况陆续为大家讲解,附录 B 详细 为大家介绍了 qmake 的用法。