- 1、本文档共66页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)