object model 概述
Object Model 综述
标准 C++ 的对象模型为对象的动态特性提供了运行时的支持。 但是它静态的本性决定了在某些领域它表现出僵化、不可扩展的特点。 GUI编程就是一个既需要运行时编译的效率, 也需要极大的灵活性的一个领域。 Qt 通过整合C++的效率和Qt Object Model的灵活性解决了这个问题。
Qt 为 C++ 增加了这些特性:
Signal and Slots Signal and Slots 提供了对象之间的无缝通信
Object Properties 可查询、可识别的对象特性
contextual string translation for internationalization 上下文相关的字符串翻译(国际化)
Events and event filter 提供了强大的事件机制。
Timers 复杂的内部计时器可以简练的在事件驱动的GUI中加入许多任务。
可继承、可查询的对象树合理的管理对象的附属关系
Guarded Pointers(QPointer) 在对象删除以后自动设为0, 相比之下,C++的指针会在对象删除后悬空。
这些特性中大部分是通过 C++ 的技术实现的, 主要是通过继承 QObject 来获取。 而 Signal and Slots 以及 Object Properties 则通过 Meta-Object System 实现。
Qt 是c++的有效扩展, 虽然模板也可以用于扩展C++, 但是 Meta-Object System 提供了许多模板+标准C++ 无法实现的特性。 参照: Why Doesn't Qt Use Templates for Signals and Slots?
Qt Objects 特性 vs 值
上述Object Model的一些特性需要把 Qt Obejcts看作特性, 而非值。 值能够被复制, 或者赋值, 而特性只能被“克隆”。 克隆表示创建一个新特性, 而不全是复制。 比如, 双胞胎有不同的特性, 他们可能长得很像, 但是他们会有不同的名字, 不同的位置, 可能不同的社交网络。
由此看来, 特性的克隆是比复制要复杂的多的操作。 对于 Object Model 来说, 它包括:
QObject::objectName. 如何为新类的objectName 赋值?
Object hierarchy (对象继承树)上的位置,如何给新类一个正确的定位?
如何管理连接到其它类的 signal slot?
对于那些没有在C++类中声明的、在运行时添加的property, 如何处理?
可见, Qt Object 是无法进行复制操作的, 因此, Qt 使用宏 Q_DISABLE_COPY 禁止使用 “=” 和 拷贝构造函数。
object model 概述的更多相关文章
- 文本对象模型(Document Object Model)
本文内容: 1. 概述 2. DOM中的节点类型 3. DOM节点的选取 4. 存取元素属性 5.DOM元素的增删 6.小结 ★ 概述 文本对象模型(DOM)是一个能够让程序和脚本动态访问和更新文档内 ...
- 浏览器对象模型(BOM,Browser Object Model)
本文内容 1.概述 2.windows与document 3.对话框 4.定时调用 5.URL解析与访问历史 6.浏览器和屏幕信息 ★概述 &q ...
- python's object model
[python's object model] 1.object.__init__(self[, ...]) 如果subclass没有实现__init__,那么python类在实例化的时 ...
- 有关BOM(Browser Object Model)的内容
包括: BOM概述 BOM模型 Window对象(常用属性和方法,窗口的打开,窗口的关闭,模态对话框,定时器) Navigator对象(遍历navigator对象的所有属性,Navigator 对象集 ...
- Selenium的PO模式(Page Object Model)[python版]
Page Object Model 简称POM 普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...
- 在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况
自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- 解决在使用client object model的时候报“object does not belong to a list”错误
在查看别人代码的时候,发现了个有意思的问题,使用client object model将一个文件check in 我使用的是如下语句获取file Microsoft.SharePoint.Client ...
- Page Object Model (Selenium, Python)
时间 2015-06-15 00:11:56 Qxf2 blog 原文 http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...
随机推荐
- AE基础知识之地图浏览
地图浏览:(放大缩小平移全图) //全局变量 public enum enumToolFlag { None ZoomOut, ZoomIn, Pan, } enumToolFlag flag = e ...
- .net调用Outlook 批量发送邮件,可指定Outlook中的账号来发送邮件
.net调用Outlook 批量发送邮件,可指定Outlook中的账号来发送邮件 源码可以在我的资源列表中下载: MPOEMail http://download.csdn.net/my VS2012 ...
- C#私房菜[二][提供编程效率的技巧]
AaronYang的C#私房菜[二][提供编程效率的技巧] 前言 我的文章简单易懂,能学到东西.因为复杂的东西,讲起来,好累.阅读者只是膜拜,学不到东西,就是没用的东西,好多文章都是看不下去.我写不出 ...
- 关于socket通讯,如何才能高效?
关于socket通讯,如何才能高效? 网络通讯,一个不朽的话题,今天和一个做游戏的朋友(以前的同事聊天),他向我诉说了他的痛苦 他之前是做客户端的,无奈人力资源紧张,也开始搞服务器,他说自己的服务器总 ...
- LoadTest中内存和线程Troubleshooting实战
LoadTest中内存和线程Troubleshooting实战 在端午节放假的三天中,我对正在开发的Service进行了LoadTest,尝试在增大压力的条件下发现问题. 该Service为独立进程的 ...
- Android 短信模块分析(四) MMS之短信的发送与接收
MMS之短信的发送与接收分析: 一.信息发送: com.android.mms.data.WorkingMessage.java 类 send()函数: public void send() { . ...
- LINUX下编译安装最新版本mysql
通过参考其他文章 1.下载安装mysql-5.5.30.tar.gz与cmake.2.8.11.2.tar.gz (1)先安装cmake(mysql5.5以后是通过cmake来编译的) [root@ ...
- 解决Eclipse一直loading workbench无法启动的问题
不知怎地,Eclipse始终停留在Loading workbench状态.反复重启,状态依旧.尝试解决. 停止时显示的状态:”Loading workbench”,看来和这个workbench插件有关 ...
- Android 布局详解
Android 布局详解 1.重用布局 当一个布局文件被多处使用时,最好<include>标签来重用布局. 例如:workspace_screen.xml的布局文件,在另一个布局文件中被重 ...
- 墙上时钟时间 ,用户cpu时间 ,系统cpu时间
一. 墙上时钟时间 ,用户cpu时间 ,系统cpu时间定义与联系 时钟时间(墙上时钟时间wall clock time):从进程从开始运行到结束,时钟走过的时间,这其中包含了进程在阻塞和等待状态的时间 ...