Bootstrap

教你学习QT -- (1)QT工程模板分析(一)

一、QT工程创建

        QT是一个可以跨平台运行的程序。在本次介绍的创建中,不考虑跨平台的创建,仅仅是在windows下编程、编译、运行。

1.1工程创建

(1)选择工程模板和类型:模板为应用程序(Application)、类型为QT窗口小部件应用程序(Qt widgets Application)

(2)设置项目名称和项目存储路径

(3)选择文件管理器(默认)

(4)设置工程文件信息:(1)类名:这是项目工程必须要有的一个类,是属于我们自己创建的(只是QT自动设置好)。(2)第一个创建的类需要继承的一个基类(默认)。(3)需要包含的头文件。(4)需要包含的源文件。(5)需要有的ui界面文件。

(5)默认

(6)选择编译器,这个根据QT程序在不同平台运行来选择支持对应平台的编译器

(7)默认、然后点击完成即可

一个QT工程创建完成!

二、工程分析

2.1工程文件分析

        一个最初的项目工程,由几部分的文件夹组成。如下

说明:在一个工程里面有三个文件夹组成,每个文件夹里面又有不同的文件。

        (1)头文件文件夹:这个主要存放需要用到的源文件对应的.h文件。

        (2)源文件文件夹:在QT中,源文件的后缀名是.cpp。在工程中,需要用的源文件就存放在这个文件夹。

        (3)UI界面文件夹:在QT中,需要使用UI的窗口界面,窗口界面也会有对应的源文件,后缀名为.ui,可以有多个窗口。UI源文件存放在这里。

        (4).pro文件:在工程目录下还有一个.pro文件,这个文件主要是用来连接QT使用到的各种源文件、头文件、和功能模板的。其中源文件和头文件是系统自动添加的了。而功能模板则是开发者根据自己使用到的模板来添加。

        功能模板说明:大概描述为,在QT中可以实现的功能有很多,其中UI界面属于一种。还有其它的。具体需要根据需求来添加。

三、工程源代码框架分析

3.1QT代码框架

        QT最终生成的应用程序是一个UI界面,然后通过UI界面来实现相应功能的操作的。所以我们先从UI文件来介绍起。

3.2 .ui文件

ui文件界面如下。

说明:在UI界面下,可以分成两部分。(1)窗口:窗口是在应用程序执行中最终显示出来的界面。(2)控件:什么是控件,是指在我们在窗口界面上面添加的如按钮、输入框这些就是控件,是程序在运行中,我们我操作的。

        在上面可以看到,整个UI界面就由两部分组成,窗口和控件,这两部分是相互独立的。其中窗口作为最终显示的UI界面,它相当于一个容器一样,控件都放到这个窗口上面,所放的控件就属于这个窗口的了。

        以类的方式了解:(1)窗口为一个类(是属于开发者自定义的一个类),然后控件又是另外一个类(当然控件有很多,每一个控件都是独立的一个类,但是所有使用到的控件都会重新封装到一个类)。此时窗口类和控件类是没有直接关系的。他们都是独立的。然后我在窗口中想要添加一些控件时。这时就是窗口包含了添加的控件。在类中的关系为,添加的控件在窗口类里面声明定义了一个控件对象。(窗口类的成员属性里面,定义了控件对象)。此时,在窗口里面的控件,就属于在窗口类里面定义了一个控件对象。

总结:控件如果在窗口中存在,则控件就属于是窗口类里面的一个属性成员,那么在窗口类里面就定义了一个控件对象。控件对象属于窗口类的属性成员。

3.3、控件类和窗口类

        在QT程序中,在我们学习框架中,有两个类是必须要有的(当然一个项目中,会有很多类,只是有两个类是框架类)。分别是窗口类和控件类(这里说的控件类,不是指具体一个控件的类,而是把使用到的控件都封装在一起的一个类)。

        其中,控件类又属于是窗口类的一个属性成员。

3.3.1控件类介绍

        控件类是所有使用到的控件的一个集合体,在QT中有很多种的控件,然后没一种控件都是一个独立的控件。在开发中,会创建一个单独的类出来,这个类里面的属性成员声明了所需要使用到控件类的指针变量。然后通过这个单独的类,去访问各种类。这个类在工程中也是必须存在的。不论有没有使用到控件,这个类都有定义,并且会有一些固定的属性成员在里面。它是定义在另一个文件中,如下

它是定义在ui_mainwindow.h中,这个文件需要程序编译后,才能跳转过去的。如下

        说明:由上面可以看到,定义的控件类是一个独立的类,它没有继承任何类。

        控件类的框架说明:上面是一个基本的框架,里面还有声明定义有具体的控件对象。有三个属性成员指针(分别是其它类定义的指针变量)。以及两个属性成员函数,这两个函数会设置窗口类的一些基本属性,和后面使用到的控件对应的基本属性。(窗口类和使用控件的基本属性设置)

3.3.2控件类的命名空间

        控件类的命名空间如下。

        

        说明:可以看到,在控件类的下面有一个UI的命名空间,这个命名空间里面定义了一个类,这个类完全继承与控件类。然后在程序里面使用时,都是使用命名空间里面定义的类。并不会直接使用最原始的控件类。

3.3.3窗口类的介绍

        窗口类的定义其实在我们创建工程的时候就为其设置了类名和继承的基类。如下分别设置的类名为(1)。然后选择窗口类需要继承的基类是(2)。

        窗口类的定义程序在(3)这个.h文件中,如下。

        说明:可以看到,定义的窗口类和继承的基类是和创建工程时设置的一样的。一个最基本的窗口类框架里面除了一个构造函数和析构函数这两个属性成员外,还有一个私有属性成员指针,这个成员就是控件类声明的一个指针。

        可以看到,在窗口类的上面有一个UI的命名空间,在命名空间里面定义了一个类(MainWindow),这个命名空间和里面定义的类,是和上面介绍的在(ui_mainwindow.h)文件里面定义的UI命名空间是同一个。只不过在这里没有包含(ui_mainwindow.h)这个头文件,所以在这边在重新定义一次。

        然后在UI命名空间里面定义的类,这个类名和窗口类的类名是一样的。但是这个UI命名空间里面的类是继承控件类的。和窗口类是两个互不相干,独立不同的

        所以看到,在窗口类的私有属性里面,定义了一个属于UI命名空间里面的控件类的一个指针变量。(这个指针,就是控件类的指针变量)。如下图。

        

          此时,使用这个窗口类来定义一个窗口类对象,并且显示这个对象,就会得到一个窗口界面出来。如下

        说明:可以看到这个定义一个窗口类的变量,然后去访问这个类里面的显示函数,就能得出一个窗口界面出来。当然这个界面的一些属性(比如窗口名,窗口的大小这些都是在类的构造函数中有设置的,在构造函数中,调用了控件类的函数来实现)。

        在上面可以看到,在定义类的时候,类里的属性成员只有一个构造函数和析构函数。并没有去调用的显示函数.show()。别忘了,我们定义的窗口类,是有继承一个基类的。那么这个显示函数,自然是属于这个基类的了。具体的后面在讲解。

如下就是没有在构造函数里面设置界面属性的窗口。

        说明:可以看到,没有设置属性的窗口界面,窗口名字和工程名是一样的,并且窗口大小也是比较小的。在项目中,一般在构造函数里面设置好窗口的属性了。

更多精彩内容,请持续关注下一篇!

        

;