QObjects以对象树组织它们自己。当你创建一个QObject以另一个对象作为其父对象时,这个QObject被加入到其父对象的children()列表中,当父对象对被删除时,其子对象也会被删除。实践表明这种组织方式非常适合GUI对象的特点与需要。举例来说,一个QShortcut(键盘快捷键)是其相关窗口的孩子,因此当用户关掉那个窗口时,这个快捷键也随之删除了。
QWidget,是所有屏幕可显示的一切事物的基类,它扩展了这种父子关系。在这种关系下,孩子通常就是一个子窗口部件,也就是说,它被显示在父窗口的坐标系中,会因为父窗口的边界约束而被裁剪。举例来讲,当应用程序关闭一个消息框时,消息框会被删除,消息框里的按纽与标签也会被随之删除,这正是我们所想的,因为按钮与标签是消息框的孩子。
你也可以亲自删除孩子对象,这些子对象会与其父对象脱离关系。举例来说,当用移除了一个工具栏,它导致应用程序删除这个QToolBar 对象,这时这个工具栏的父对象QMainWindow察觉到了变化,会相应地重新配置其屏幕空间。
调试函数,QObject:dumpObjectTree()与QObject::dumpObjectInfo()非常有用,当一个应用程序行为怪异,让你手足无措时,你应该想到也许需要它们帮忙。
有了以上知识后,你再看到了某些代码只new出来一个对象,而不再delete的做法,就会心平气和些了。
posted on 2007-09-25 20:36 清源游民 阅读(2340) 评论(0)  编辑 收藏 引用 所属分类: Qt

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿(35)

随笔分类(78)

随笔档案(74)

文章档案(5)

搜索

  •  

最新评论

阅读排行榜

评论排行榜