前言
- 前端网页开发也涉及到类似的对象树,本质上是一个树形结构(N叉树),通过树形结构把界面上的各种元素组织起来。
- QT中也是类似搞了一个对象树,把界面上各种元素组织起来。比如QWidget下面会有QLabel ,QpushButton, QListWidget,其中QListWidget还有很多节点,通过树形结构将界面上显示的控件对象组织起来,方便统一对对象进行释放。窗口销毁时,统一释放对象,提前销毁就会不在窗口上存在该标签。
一、挂在树上
之前通过new的方式创建,就是为了将它交给QT对象树统一管理。如果栈上创建就会出现提前释放。
如果我们将上文代码改成在栈上,hello world无法显示。
二、不delete的原因
1.自己创建类展示释放效果
然后就可以看到QTCreater生成的代码,但是没完全生成。mulabel.h中可以看到warning提示,原因是没有包含相关的头文件,手动包含即可。
#include<QLabel>//手动添加
class Mylabel : public QLabel
{
public:
//Mylabel();
MyLabel(QWidget* parent);
};
#endif // MYLABEL_H
构造函数使用带QWIdget* 版本的,确保自己的对象能够加到对象树上。
2.cpp文件
在QTCreater中,可以通过F4切换对应的头文件和.cpp文件
vim中采用":A&#