【Qt入门实践】QObject使用总结
来源:互联网 发布:穆雅斓的淘宝店斌斌 编辑:程序博客网 时间:2024/05/17 03:15
QObject
QObject是Qt所有对象的基类,是Qt对象模型(QtObject Model)的核心。Qt对象模型的主要特性是一个能让对象间无缝交流的强大机制:信号和槽。你可以使用connect()方法连接一个信号和槽,也可以使用disconnect()方法断开这个连接。
QObjects用对象树来组织它们自己。当你创建一个QObject,并且将另一个对象设置为它的parent的时候,这个对象会自动的把它自己加到parent对象的children列表中。Parent持有这个对象的所有权,也就是说,当parent释放的时候会自动把children都释放掉。你可以使用findChild()方法或者findChildren()方法去查找一个对象,区别是一个是返回单个对象,一个是返回对象列表。
每个对象都有对象名称(objectName()),它的类名可以通过metaObject()得到,你还可以通过调用inherits()方法判断对象的类是否派生至另一个类。
当一个对象被删除的时候,它会发送一个destroyed()信号,你可以截获这个信号去做些自己的处理。比如,防止悬挂指针的出现。
QObjects可以通过event()方法接收事件,并且可以通过installEventFilter()和evnetFilter()过滤其他对象的事件,也可以通过实现childEvent()来截获子对象的事件。
QObject还提供了基础定时器的支持,可以使用startTimer()来启动定时器,重新实现timerEvent()函数来响应定时器的处理。如果你想使用更高级的定时器的话,就需要使用QTimer对象。
有一点需要注意的是,Q_OBJECT宏对于所有需要使用信号、槽或属性机制的对象都是必须。建议大家对于所有派生至QObject的类都加上Q_OBJECT宏,不管你是否需要信号、槽、属性机制,因为如果缺少这个宏,有些QObject函数可能会出现未定义的行为。
QObject被设计为没有复制构造函数和赋值操作符,实际上在QObject里声明了,但是都是私用的并且空实现,所以使用不了。这是通过使用宏Q_DISABLE_COPY()来实现的。实际上,所有派生至QObject的类都应该使用这个宏来屏蔽复制构造函数和赋值操作符。QObject被认为不应该提供复制操作是基于以下考虑:
1. 每个QObject都有一个objectName,复制后的对象名称应该是什么?
2. 每个QObject在对象树中都有自己的位置,复制后的对象应该放在哪个位置?
3. QObject对象可以通过信号槽和其他对象链接起来,复制后的对象怎么处理链接关系?
4. QObject属性可以在运行期动态添加,复制后的对象是否也需要添加这些属性?
这些问题我们都很难回答,所以我们应该把QObject当做identities对待,而不是values。Identities只能clone不能copy或assign,clone一个identity比copy和assign复杂多了。因此,QObject所有子类都应该屏蔽复制构造函数和赋值操作符。- 【Qt入门实践】QObject使用总结
- QT QOBJECT
- Qt--QObject
- 使用Qt的QObject类实现多叉树
- qt使用QTranslator QObject::tr(“”)软件国际化
- 使用Qt的QObject函数实现二叉树或多叉树
- Qt 编码 QObject::tr()
- Qt中QObject分析
- Qt 之 QObject
- qt 之 QObject
- Qt connectSlotsByName(QObject *)
- QT 读 QObject类
- 【QT】QObject简介
- 【Qt入门实践】QString和QStringList使用案例
- 【Qt入门实践】Meta-Object的重要性和使用原理
- 【Qt入门实践】布局器
- Qt源码分析之QObject
- Qt源码分析之QObject
- xamarin.forms Geolocator Plugin 地理位置的获取
- 程序猿之回忆过去^_^展望未来 (于2013-6-23 16:51记)
- Ubuntu 14.04重装mysql
- rt thread
- POJ2739
- 【Qt入门实践】QObject使用总结
- 文章标题
- Mysql常用命令总结
- phoengap百度云推送插件(android)
- xamarin.forms 拍照和视频的操作
- hdu 4870 Rating (概率dp)
- 【Qt入门实践】Meta-Object的重要性和使用原理
- 算法提高 最大乘积 (排序+模拟+贪心)
- xamarin.forms 文件的一些操作,统一代码