网站模板下载百度云链接怎么做的,WordPress如何添加备案,页面制作多少钱,企业网站的网络营销功能包括Qt 对象树 对象树概念Qt为什么使用对象树 #xff1f;将对象挂到对象树上 对象树概念
对象树#xff1a;对于树的概念#xff0c;相信许多学过数据结构的同学应该都不会陌生。在学习数据结构的时候我们所接触的什么二叉树、多叉树、哈夫曼树、AVL树、再到红黑树、B/B树……… Qt 对象树 对象树概念Qt为什么使用对象树 将对象挂到对象树上 对象树概念
对象树对于树的概念相信许多学过数据结构的同学应该都不会陌生。在学习数据结构的时候我们所接触的什么二叉树、多叉树、哈夫曼树、AVL树、再到红黑树、B/B树……其实说白了都是树型结构的数据结构。
如果你说我还没有学过数据结构听不懂或者不了解说的这些数据结构那也没关系——文件目录在计算机上的文件目录其实也是一个多叉树的树形结构。通常我们以盘为根文件夹为节点向下延伸。 如下图
Qt中的对象树也是一个多叉树的树形结构呈现的其实除了Qt以外还有很多的语言也是使用了对象树的概念例如大伙熟知的Java、JavaScript。
Qt为什么使用对象树
先说结论为了方便对象回收 在Qt编程中我们是在对一个页面窗口页面进行操作在这个页面窗口中不乏会使用到很多的控件例如按钮、文本框、输入框等。我们期望这些控件是能够跟随着窗口的生命周期一起显示在页面窗口中当关闭窗口时这些控件也跟随窗口关闭一起释放。
所以这些需要显示的对象一定是不能创建在栈区上因为栈区的资源是局部的出了作用域就直接释放了。要让对象能够跟随着窗口关闭释放就只能通过在堆区创建对象然后将对象挂载到对象树上使用对象树来进行统一的释放。
关于对象树Qt学习了Java的思想——Java中所有的对象都继承了一个叫Object类。Qt也自己也搞了个叫QObject的类当关闭窗口后QObject类析构连带着所有挂在QObject对象树上的子类一起析构(其实是子类先析构完成最后再析构QObject只是为了好理解这也是面向对象的知识这里不多赘述~~)。
将对象挂到对象树上
以QWidget为例当我们创建的项目时选择以QWidget类作为父类构建此时编译器会生成一个继承自QWidget的Widget类我们只需要关注在Widget窗口类中开发就行了。
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#include QButtonGroup
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H我们创建对象的原则是如果是需要一直在窗口页面上显示的控件就需要用new创建Qt内置的控件都可以在创建时通过构造函数传参来指定对象的父类通常是this,也就是Widget将对象挂到对象树上)。当对象挂到对象树上后如果不释放是否会出现内存泄漏呢不会
挂到对象树上的对象生命周期会交给对象树来完成我们不需要关心。
#include widget.h
#include ui_widget.h
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);QPushButton* button new QPushButton(this/*指定父类也就是Widget*/);
}Widget::~Widget()
{delete ui;
}小结本章主要讲述了Qt5 框架中对象树的概念比较浅也只是以了解和使用的角度去讲。对象树其实听起来是挺高级的其实就是利用了面向对象的思想将所有对象都继承自一个对象再让这个主对象对所有的子对象进行统一管理释放。
如何将对象挂到对象树上 如上操作内置的控件指定一下自己的父类把自己挂到对象树上就可以啦~。