QT的概述:
QT是一个跨平台的 C++ 图形用户界面(GUI)应用程序开发框架,它不仅提供了创建 GUI 界面的各种组件(如窗口、按钮、文本框等),还包含了丰富的非 GUI 功能模块,支持从桌面应用到嵌入式系统、移动设备的多平台开发,是现代软件开发中极具灵活性和扩展性的工具集。
图形用户界面 :(GUI)
- 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
- 图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。
Qt 的 pro 文件:
在使用 Qt 向导生成的应用程序.pro 文件格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
SOURCES += \
main.cpp \
qtcode.cpp
HEADERS += \
qtcode.h
FORMS += \
qtcode.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target.pro 就是工程文件(project),它是 qmake 自动生成的用于生产 makefile 的配置文件。
Qt的基本操作:
- QObject 是 Qt 内置的父类。 Qt 中提供的很多类都是直接或者间接继承自 QObject。借助 Qt 助手了解 Qt 的类(找到 Qt 类的族谱)
基本控件的创建:
实例化一个按键在窗口上,并修改窗口、按键大小,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QPushButton *MyButton1; //公有的属性:为了后期还可以找到空间
};1
2
3
4
5
6
7
8
9
10
11
12
Widget::Widget(QWidget *parent) : QWidget(parent)
{
setWindowTitle("Qt Demo"); //设置窗口名称
resize(QSize(800, 500)); //设置窗口尺寸
MyButton1 = new QPushButton(this); //在堆区实例化一个按键,并将地址给类的一个属性
MyButton1MyButton1->setText("我是个按键"); //修改按键名称
MyButton1->resize(QSize(500, 300)); //修改按键尺寸
}
Widget::~Widget()
{
}
坐标体系:
控件创建之后的左上角默认坐标为(0,0)

对象树:
- Qt 引入对象树的概念,在一定程度上解决了内存问题。
- 在 Qt 中创建对象的时候会提供一个 Parent 对象指针,其中 QObject 是以对象树的形式组织起来的。
- 当你创建一个 QObject 对象时,会看到 QObject 的构造函数接收一个 QObject 指针作为参数,这个参数就是 parent,也就是父对象指针。这相当于,在创建 QObject 对象时,可以提供一个其父对象,我们创建的这个 QObject 对象会自动添加到其父对象的 children()列表中,也就是说,每个控件都有一个孩子列表当父对象析构的时候,这个 children()列表中的所有对象也会被析构。
- QWidget 是能够在屏幕上显示的一切组件的父类。
- QWidget 继承自 QObject,因此也继承了这种对象树关系。一个子类自动地成为父组件的一个子组件。因此,它会显示在父组件的坐标系统中,被父组件的边界剪裁。例如,当用户关闭一个对话框的时候,应用程序将其删除,那么,我们希望属于这个对话框的按钮、图标等应该一起被删除。事实就是如此,因为这些都是对话框的子组件。当然,我们也可以自己删除子对象,它们会自动从其父对象 children()列表中删除。比如,当我们删除了一个工具栏时,其所在的主窗口会自动将该工具栏从其子对象列表中删除,并且自动调整屏幕显示。
- 工作准则:
- 当一个 QObject 对象在堆上创建的时候, Qt 会同时为其创建一个对象树。 不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。任何对象树中的 QObject 对象 delete 的时候,如果这个对象有 parent, 则自动将其从 parent 的 children()列表中删除;如果有孩子,则自动 delete 每一个孩子。
- 注意:由于局部对象的析构顺序应为实例化的相反过程,在使用对象树时,某些特殊情况也会出现一些问题。
- 养成习惯:
- 按照标准顺序实例化对象—在实例化对象时指定父对象
- 大胆的在堆区实例化对象(new)