Chinaunix首页 | 论坛 | 博客
  • 博客访问: 271950
  • 博文数量: 28
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 326
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-10 12:12
文章分类

全部博文(28)

文章存档

2020年(1)

2018年(1)

2017年(3)

2015年(7)

2014年(9)

2010年(3)

2006年(4)

我的朋友

分类: C/C++

2014-02-25 16:41:46

QObject 是所有Qt对象的基类。

QObject Qt模块的核心。它的最主要特征是关于对象间无缝通信的机制:信号与槽。使用connect()建立信号到槽的连接,使用disconnect()销毁连接,使用blockSignals()暂时阻塞信号以避免无限通知循环,使用connectNotify()disconnectNotify()追踪连接。

QObject 以对象树的形式组织起来。当为一个对象创建子对象时,子对象会自动地添加到父对象的children()列表中。父对象拥有子对象的所有权,比如父对象可以在自己的析构函数中删除它的孩子对象。使用findChild()findChildren()通过名字和类型查询孩子对象。

每个对象都有objectName(),也可以通过metaObject()获得它的类名。可以使用inherits()检测对象的类是否在某个类的继承层次结构中。

对象被删除时,发射destroyed()信号,捕捉这个信号以免悬挂对这个对象的引用。

QObject 通过event()接收事件,通过installEventFilter()enventFilter()过滤来自其他对象的事件。childEvent()可以捕捉来自子对象的事件。

QTtimer可以实现高水平的定时器。

Q_OBJECT是任何实现信号、槽或属性的强制性要求。不管是否需要实现这些机制,都要求使用这个宏。否则会引发一些函数的奇怪行为。

所有的Qt部件都继承自QObject 。函数isWidgetType()检测对象是否一个部件。它比以下这些语句要运行得更快:qobject_cast(obj) 或者obj->inherits("QWidget")

children()返回QObjectList,它是QListtypedef

没有复制构造函数和赋值操作符

QObject 既没有复制构造函数也没有赋值操作符。实际上它们使用宏Q_DISABLE_COPY()声明在私有部份。所有派生自QObject 的对象都使用这个宏声明复制构造函数和赋值操作符为私有。

这样的主要结果是,在使用QObject子对象作为值的地方要使用QObject类型的指针。因为没有构造函数,你不能把QObject 的子对象作为值存储在容器类中,必须存储它的指针。

自动连接

Qt的元对象系统自动地为QObject 的子类和他们的对象建立信号和槽的连接。只要有名字的对象被定义,槽就会自动拥有简单的约定命名,连接在运行时间通过函数QMetaObject::connectSlotsByName()执行。

国际化

所有的 QObject 支持Qt的转换特性。能够使用户界面在不同语言间进行转换。为了将用户可见的文本得到转换,必须将它们包裹到函数tr()中。
阅读(10120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~