1 新建第一个项目
New Project -->qt widges application
![qt](https://img-blog.csdnimg.cn/b9e37e0bcb1f4b338b663028c6a09c85.png)
给项目创建名称,名称不能有中文和空格,创建路径中也不能有中文路径,不会报错但是运行时会报错
![在这里插入图片描述](https://img-blog.csdnimg.cn/550002b8a7174785a8678feb31626c6b.png)
再下一步,到Kits,中文构建套件,用于选择编译套件,
![在这里插入图片描述](https://img-blog.csdnimg.cn/b2b700d8f82a4931bd6ddea152c7ed67.png)
下一步,类的信息,在创建一个新的qt项目时,都会默认地去创建一个类,这个类就是主窗口的类。其中基类有三种选择
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ec589147d5946aab6ab8ead5ee47de4.png)
其中QWidge是QMainWindow和QDialog的父类,QWidge是一个最简单的窗口(Widge就是窗口的意思),QMainWindow多了菜单栏,状态栏等,QDialog就是对话框;
首先我们来创建一个基类,创建一个myWidge类,这是会发现系统自动给创建了.h和.cpp
![在这里插入图片描述](https://img-blog.csdnimg.cn/1a6da3b1c74240e79a6dd1e7deda5c8e.png)
下边的创建界面,会有一些设计界面,里面的控件可以直接进行拖拽,一开始学习可以给它取消,先用代码去实现一些功能会更合适
下一步到汇总的界面,添加到版本控制系统,适用于团队协作svn vss git;可以看到左下角,是创建完这个项目之后会添加哪些文件,
![在这里插入图片描述](https://img-blog.csdnimg.cn/f16dcdae656a4972941afb76c2046e85.png)
.pro
工程文件,类似于.sln
文件,双击就能打开整个工程;main.cpp
程序入口,另外两个是窗口的.h
文件和.cpp
文件
这之后按理就应该正常显示.h .cpp等文件,但我这边只有.pro文件,
![在这里插入图片描述](https://img-blog.csdnimg.cn/3a3c4aedc74849889d7f9e0dddbcf217.png)
……网上找了很多方法,都不对,最后定位到编译套件这一块,当时选择的时候我以为随便选一个就行,然后重新建工程,把默认的都保留了,再打开就都有了
![在这里插入图片描述](https://img-blog.csdnimg.cn/b0e9ed1f25394da5b20595a4cec9d465.png)
小插曲,继续~
先看main函数程序入口
#include "mywidget.h"
#include <QApplication>//包含一个应用程序的类的头文件
//main程序入口 argc命令行变量的数量 argv命令行变量的数组
int main(int argc, char *argv[])
{
QApplication a(argc, argv);//a 是应用程序对象,在qt中应用程序对象有且只有一个
myWidget w;//实例化一个窗口对象,它的父类叫QWidge
w.show();//窗口对象默认不会显示,必须要调用show方法才能显示窗口
return a.exec();//让应用程序对象进入消息循环 不会一闪而过, 代码会阻塞到这一行,后面的代码不会被执行
}
显示一个窗口:
![在这里插入图片描述](https://img-blog.csdnimg.cn/5cd9533e155c4aa08a26c261774fdec3.png)
工程文件的学习
![在这里插入图片描述](https://img-blog.csdnimg.cn/da69c962890f4fcb86c149f7673fd65a.png)
.h文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/6fd931a815704b7084d3d501fa690d21.png)
快捷键
运行:ctrl+r
编译:ctrl+b
自动对齐:ctrl+i
同名之间.h和.cpp的切换:F4
QPushButton创建
头文件:QPushButton
qmake: QT+= WIDGES
按钮就在父窗口中了, 用btn的方法进行显示文本啥的
第二种方法创建按钮
![在这里插入图片描述](https://img-blog.csdnimg.cn/64e572d8adb947cbb589380d85a5428d.png)
但得到的窗口大小会按着控件大小来, 一般来说这种方法不好
![在这里插入图片描述](https://img-blog.csdnimg.cn/786f4046ffdb4a6f9ab9d245789e632d.png)
但是我们可以重置窗口的大小, 用resize(w, h);
还有一些操作,比如移动按钮,设置窗口标题,设置固定窗口
对象树
当QT中创建对象的时候会提供一个Parent对象指针,具体作用:
当创建一个QObject对象树时, 会看到QObject的构造函数接收一个QObject指针作为参数, 这个参数就是parent即父对象指针,这相当于在创建QObject对象时可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表
当父对象析构时,这个列表中的所有对象会被析构,注意这里的父对象不是继承意义上的父对象, 这种机制在GUI程序设计中相当有用,如一个按钮有一个快捷键对象作为其子对象,那么当我们删除按钮的时候, 快捷键也应当被删除。
举例在原来myWidge上派生一个子类mypushButton
,并调用子类的方法
在已有工程上添加C++新文件,继承QPushButton
![在这里插入图片描述](https://img-blog.csdnimg.cn/039fe258d79c43efb8a88822b3deb447.png)
在myWidge
中创建一个自己按钮的对象
![在这里插入图片描述](https://img-blog.csdnimg.cn/df5751ca08c44d90b46842c9af896e80.png)
其中 myBtn->setParent(this);
就是设置到对象树中,这样当释放窗口的时候,下面的子类也都会被释放掉
释放顺序和C++一样,构建先父类再子类,但释放先子类再父类,但是他的打印顺序相反
![在这里插入图片描述](https://img-blog.csdnimg.cn/d4820b246ed04b89879cc6d03ab06353.png)
因此qt一定程度上简化了内部回收机制
qt中的坐标系
(0,0)在左上角,X向右增大,Y向下增大