🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 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 的用法。