QT += core gui //如果Qt版本不是大于4的,只需要包含这一条语句就行了
//QT4及以前的版本widgets模块是包含与gui模块当中,如果是版本大于4,重新包含widgets,因为在Qt4之后,widgets分出来了,需要重新包含
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
知识点1:创建第一个按钮
步骤1:包含头文件(在.cpp文件中)及模块(在.pro文件中)
#include <QApplication> //所要包含的头文件
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //所要添加的模块
步骤2:调用类的构造函数创建按钮
QPushButton *button =new QPushButton;
步骤3:显示按钮
//显示方式是另外开一个窗口显示按钮
button->show();
//设置按钮的父对象为窗口,这样按钮就在窗口上显示
button->setParent(this);
知识点2:按钮的属性设置
//设置按钮的内容
button->setText("第一个按钮");
//设置按钮的显示位置
button->move(100,100);
//设置按钮的大小
button->setFixedSize(400,400);
知识点3:创建按钮的其他方式及两种创建按钮的区别
QPushButton *button2 = new QPushButton("第二个按钮",this);//创建按钮的第二种方式
this->resize(600,400);
区别:
方式1:窗口默认大小,按钮显示在左上角
方式2:窗口是根据按钮的大小来创建的
知识点4:对象树(对象模型)
概念:Qt对象间父子关系。
解决问题:在一定程度上解决了内存问题,简化内存回收。
举例:
自定义按钮类继承QPushButton,实例化自定义按钮类,并将其添加窗口类,实现构造与析构,然后关闭窗口,看析构函数是否自动执行。(在Qt中,尽量在构造的时候就指定parent对象,并且大胆在堆上创建。)
该段代码无问题:因为栈一般先构造的后析构,
下面程序是先析构button,同时将button从window的子对象列表删除,
然后析构window,仅析构window(window无对象)
QWidget window;
QPushButton quit = QPushButton ("退出", &window);
该段代码有问题:因为栈一般是先构造的后析构,导致重复析构,程序崩溃。
下边程序是先析构window,析构window及window子对象(quit),然后析构quit
QPushButton quit("Quit");
QWidget window;
quit.setParent(&window);
正序入栈倒序出栈,正序构造倒叙析构。
创建完对象执行完无参构造后,会自动调用析构函数。
知识点5:QT窗口坐标体系
注意:对于嵌套窗口,其坐标是相对与父坐标来说的。