目录
一 学习Qt的动机
二 创建第一个Qt程序
关于main.cpp
QApplication
Widget
关于对象树
关于Widget常用的API
return a.exec()
一 学习Qt的动机
我在学习了C++之后,想做图形化界面。实现前后端的交互。这时候就可以利用Qt进行编程。
二 创建第一个Qt程序
Qt文件是这样组织的(以Widget为例)
关于main.cpp
我们从这个程序出发,根据出现的内容来进行拓展式的讲解
QApplication
a是QApplication的一个对象,叫做应用程序对象。他有且仅有一个。传入的是命令行参数。
有什么用?通过解析命令行参数,来设置程序内部状态。说的通俗一点就是设置一些初始值。我们即使不写任何代码,程序也会自动有一个框框弹出,并且已经被默认设置好了一些参数。这个就是传递的命令行参数做到的。即使什么都不做都会弹出这个窗口。
QApplication从底层窗口系统接收事件。(之后会讲到绑定再做解释)也就是说这个窗口是在最底层的,我们之后添加的一些空间对话框什么的都是在这个上层,可以理解成QApplication是一块画布,我们之后添加的东西就相当于在画布上画画。
Widget
w是Widget的一个对象。Widget是继承QObject之后的一个类
Qt中的一个体系结构是这样子的,也叫作对象树。对象树就是描述了Qt中继承关系的一个结构图。最顶层是QObject。
关于对象树
Qt的一个优势是简化了内存回收机制,C++中对象被new出来就要去析构对象,如果没有进行析构的话,就可能出现内存泄漏的问题。但是Qt之所以会简化内存回收机制和这个对象树的关系很密切。
当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。
怎么理解这样的一句话?
QWidget是继承自QObject的,实现的时候有对应的构造函数和析构函数。构造的时候,是从基类往下构造的。也就是说先构造QObject再构造QWidget。析构的时候是从下往上析构的。当我们关闭窗口的时候,析构掉了最上层的对象,因此继承了最上层对象的对象自然而然也就被析构掉了。
就好比我们平时打开一个网页,如果把网页关闭了的话,基于网页存在的按钮啊,文本啊什么的就全部都不存在了。
关于Widget常用的API
Widget模块可以定义一些最基本的类,可以实现比如对窗口进行的一些操作:设定窗口大小啊,设定窗口标题啊;还可以添加一些小部件,比如按钮,也可以对按钮进行一些基本的操作。
在介绍这个功能之前,我们先来了解一下Qt中窗体的一个规定:
以最左上角为坐标原点,向下y依次增加,向右x依次增加
1 对窗体的操作
①设定窗口大小
这样我就得到了一个400×400大小的窗口了 。但是这个窗口是可以被拖动的。如果我们想设置固定的大小,就要使用setFixedSize了。当然,也可以只对x或者y进行设置,非常的灵活。
②设置窗口的标题
这样在最左上角就出现了对应文本的提示
②对按钮的操作
创建按钮
要调用show方法才可以,要不然就看不到对应的按钮了。
但是我们发现,直接创建出来的按钮和窗体是分离的。因此,我们必须要进行绑定操作,将按钮绑定到窗口上。
这里有两种绑定方式
按钮移动:move,参数传入对应移动的方向和距离。
设置文字:setText。
按钮如果直接创建的话,默认是在(0,0)位置创建,因此不做移动的话,后面的按钮会覆盖前面的按钮,我们需要移动一下。
return a.exec()
return a.exec() 让应用程序对象进入消息循环机制中,代码阻塞到当前行。说人话就是我们可以一直看到对应的窗口和上面的东西,除非我们手动退出。如果是C++中的return 0的话,窗体就一闪而过,什么都没有了