QT设计模式:组合模式(QObject对象树)

基本概念

组合模式是一种结构型设计模式,是将对象组合成树形结构以表示"部分-整体"的层次结构。以便于使用简单的部分来创建复杂的对象。

实现的类

  1. Component(抽象构件): 抽象构件通常是一个抽象基类,它定义了组合模式中所有对象共同的接口。
  2. Leaf(叶子构件): 叶子构件是组合模式中的最小单元,它不包含其他子对象。在 Qt 中,可以创建继承自 Component 的具体类。
  3. Composite(容器构件): 容器构件是组合模式中包含其他组件的对象。在 Qt 中,可以创建继承自 Component 的容器类,并拥有一个存储子组件的容器。

使用场景

  • 适用于处理具有层次结构的对象集合。
  • 并且希望以统一的方式对整个结构进行操作,并且可以忽略层次的差异。
  • 可以对叶子和容器进行分离,并且可以增加类型。

实现:QObject和对象树

QObject 是 Qt 中的元对象(Meta Object)基类之一,用于支持 Qt 的元对象系统。 任何一个QObject 对象都可以组成一个树形结构,每个节点都是一个 QObject 对象,子节点可以是其他 QObject 对象。
每当我们创建一个继承于 QObject 的 Qt 对象时,将会自动创建一个构造函数如下
explicit MyObject(QObject *parent = nullptr);

这里的 parent 就是为这个对象指定一个父类对象。

每个 QObject 都可以有(至多)一个父  QObject ,且可以拥有任意数量的子 QObject, 换句话说,每个子对象的类 型必须是 QObject 或者必须派生自 Q Object 。每个 QO bject  都将指向各个 子对 象的指针存放在 QObj ectList 中。
每个 QOb ject 父对象都会管理自己的子对象, 这就意味着,在调用 QObject 的析构函数时会自动销毁该对象的子对象。
 
子对象列表会在各个 QObject 对象之间建立一种双向的关联:
  1. 每个父对象都知道它的子对象的地址。
  2. 每个子对象都知道其父对象的地址。

QT创建对象树的例子如下:

    QObject *root = new QObject();

    QObject *child1 = new QObject(root);
  
    QObject *child2 = new QObject(root);

    QObject *grandchild1 = new QObject(child1);

    QObject *grandchild2 = new QObject(child1);

其对象树结构为:

其中,作为父对象的root可以管理,查找,删除,遍历子对象。

这便是组合模式中的"部分-整体"的层次结构。

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值