Qt Creator快速入门 第7章 Qt对象模型与容器类.ppt

Qt Creator快速入门 第7章 Qt对象模型与容器类.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Qt Creator快速入门 第7章 Qt对象模型与容器类

《Qt Creator快速入门》第2版;主 要 内 容;7.1 对象模型;信号和槽;信号;发射信号;槽;信号和槽的关联;关联方式;使用信号和槽注意事项;信号和槽自动关联;信号和槽的高级应用;信号和槽机制的特色和优越性;属性系统;一个属性类似于一个数据成员,不过添加了一些可以通过元对象系统访问的附加功能: 一个读(READ)访问函数。该函数是必须有的,它用来读取属性的取值。这个函数一般是const类型的,它的返回值类型必须是该属性的类型,或者是该属性类型的指针或者引用; 一个可选的写(WRITE)访问函数。它用来设置属性的值。这个函数必须只有一个参数,而且它的返回值必须为空void; 一个可选的重置(RESET)函数。它用来将属性恢复到一个默认的值。这个函数不能有参数,而且返回值必须为空void; 一个可选的通知(NOTIFY)信号。如果使用该选项,那么每当属性的值改变时都要发射一个指定的信号; 可选的DESIGNABLE表明这个属性在GUI设计器(例如Qt Designer)的属性编辑器中是否可见。大多数属性的该值为true,即可见; 可选的SCRIPTABLE表明这个属性是否可以被脚本引擎(scripting engine)访问,默认值为true; 可选的STORED表明是否在当对象的状态被存储时也必须存储这个属性的值,大部分属性的该值为true; 可选的USER表明这个属性是否被设计为该类的面向用户或者用户可编辑的属性。一般,每一个类中只有一个USER属性,它的默认值为false; 可选的CONSTANT表明这个属性的值是一个常量。对于给定的一个对象实例,每一次使用常量属性的READ方法都必须返回相同的值,但对于不同的实例,这个常量可以不同。一个常量属性不可以有WRITE方法和NOTIFY信号; 可选的FINAL表明这个属性不能被派生类重写。 其中的READ,WRITE和RESET函数可以被继承,也可以是虚的(virtual),当在多继承时,它们必须继承自第一个父类。 ;自定义属性示例;使用自定义的属性: MyClass *my = new MyClass(this); // 创建MyClass类实例 connect(my,SIGNAL(userNameChanged(QString)),this, SLOT(userChanged(QString))); my-setUserName(“yafei”); // 设置属性的值 qDebug() “userName:” my-getUserName(); // 输出属性的值 // 使用QObject类的setProperty()函数设置属性的值 my-setProperty(userName,linux); // 输出属性的值,这里使用了QObject类的property()函数,它返回值类型为QVariant qDebug() userName: my-property(userName).toString(); ;对象树和拥有权;示例;运行程序,然后关闭窗口,在Qt Creator的应用程序输出栏中的输出信息为: delete widget delete button 可以看到,当关闭窗口后,因为该窗口是顶层窗口,所以应用程序要销毁该窗口部件(如果不是顶层窗口,那么关闭时只是隐藏,不会被销毁),而当窗口部件销毁时会自动销毁其子部件。这也就是为什么在Qt中经常只看到new操作而看不到delete操作的原因。 在main.cpp文件,其中Widget对象是建立在栈上的: Widget w; w.show(); 这样对于对象w,在关闭程序时会被自动销毁。而对于Widget中的部件,如果是在堆上创建(使用new操作符),那么只要指定Widget为其父窗口就可以了,也不需要进行delete操作。整个应用程序关闭时,会去销毁w对象,而此时又会自动销毁它的所有子部件,这些都是Qt的对象树所完成的。 所以,对于规范的Qt程序,要在main()函数中将主窗口部件创建在栈上,例如“Widget w;”,而不要在堆上进行创建(使用new操作符)。对于其他窗口部件,可以使用new操作符在堆上进行创建,不过一定要指定其父部件,这样就不需要再使用delete操作符来销毁该对象了。;元对象系统; 元对象系统主要是为了实现信号和槽机制才被引入的,不过除了信号和槽机制以外,元对象系统还提供了其他一些特性: QObject::metaObject()函数可以返回一个类的元对象,它是QMetaObject类的对象; QMetaObject::className()可以

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档