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 ...
随机推荐
- 通过DialogFragment从DatePicker或TimePicker中获取日期数据
通过DialogFragment从DatePicker或TimePicker中获取日期数据 一个activity类,里面存有date和time的变量,想通过dialogfragment的方式获取用户输 ...
- 虚拟化平台cloudstack新版本的调试
虚拟化平台cloudstack(7)——新版本的调试 调试环境 ubuntu 12.04 JDK1.7 apache-maven-3.10 eclipse 4.2 Juno mysql 5 源码下载及 ...
- mssql server 函数大全
一.字符转换函数1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘'括起来,但含其它字符的字符串必须用‘'括起来使用,否则会出错.2.CHAR ...
- 自己动手写spring容器(1)
毕业刚刚一年多一点,毕业了后也顺利的进入了一家著名的互联网公司,做的是后台系统,用的呢也是SSI(struts2,spring)框架,平时做做项目,也已足够了,但是感觉越来越没动力了,越来越没有激情了 ...
- hdu 1507
求能出售多少个1*2的矩形,,将原图染色,(i+j)%2==0的染白色,其余为黑色, 求白色跟黑色的最大匹配 #include<stdio.h> #include<string.h& ...
- android应用程序fps meter[帧数显示]的分析 —— 浅谈root的风险 (1)
fps meter是常用的检测帧率的软件,该软件需要root权限才能工作,一直比较好奇它一个apk是如何知道系统当前的帧率情况的,就针对此apk分析了一下其工作原理. Apk组成 首先看一下apk的组 ...
- linux 下把Caps_Lock 映射成Ctrl
我用的是debian 7,以前是gnome桌面,系统里就有改变键盘布局的设置.之前gnome 崩了一次,就换成了openbox ,稍微配置了一下也可以很好使用. 可以参考这篇文章 5分钟openbox ...
- web打印小结
项目中有个需求是将winform客户端的打印,移到网页上由客户自行打印,打印要求是根据一定的格式实现套打. 当时的解决方案是使用PDF打印: 1. 准备好套打格式的底图: 2.打开底图,将动态内容画到 ...
- easyui 个人使用心得之下拉列表
下拉框: 第一种:从数据库获取<input id="FlowType" name="FlowType" style="width: 245px; ...
- Extjs的GridPanel分页前后台完整代码实例
第一次写文章啊,有些冲动.最近在公司学习Extjs,做了一个分页的小实例和大家分享. 1.首先编写paging-grid.js文件,这是我在网上参考的例子改写的,大同小异. Ext.onReady(f ...