鱼C论坛

 找回密码
 立即注册
查看: 2667|回复: 0

[技术原创] 108-对象树与拥有权(Object Tree &Ownership) -【扫盲】

[复制链接]
发表于 2016-10-22 14:29:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2016-10-22 16:20 编辑

0.jpg
1.jpg


Qt中使用对象树(object tree)来组织和管理所有的QObject类及其子类的对象。

当创建一个QObject时,如果使用了其他的对象作为其父对象(parent)。

那么这个QObject就会被添加到父对象的children()列表中,这样的父对象被销毁时,这个QObject也会被销毁。

实践表明,这个机制非常适合管理GUI对象。

例如,一个QShortcut(键盘快捷键)对象使相应窗口的一个字对象,所以当用户关闭了这个窗口时,这个快捷键也可以被销毁。

QWidget作为能够在屏幕上显示的所有部件的基类(是不是超厉害~),拓展了对象间的父子关系(你有没有想过,为啥没有母子关系?
一个子对象一般也就是一个子部件,因为他们要显示在父部件的区域之中。

例如,当你关闭一个消息对话框(message box)后要销毁它,消息对话框中的按钮和标签也会被销毁。

因为按钮和标签都是message box的子部件吗。

树根都死了,果子又怎么存下呢!

当然了,也可以自己来销毁一个子对象。

接下来我们要搞事情!!!

只new,不delete!


有两种剧情,我提前撩开让你看下~


  • 对于规范的Qt程序,我们要在main()函数中将主窗口部件创建在栈上

    例如

    Widget w;


    而不要在堆上进行创建(使用new操作符)。

    对于其他窗口部件,可以使用new操作符在堆上进行创建,不过一定要指定其父部件,这样就不用delete操作来销毁对象。





  • 重定义父部件(reparented)

    例如,将一个包含其它部件的布局管理器应用到窗口上。

    那么在该布局管理器和其中的所有部件都会自动将他们的父部件转换为该窗口部件



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表