Qt中Q_PROPERTY定义属性以及属性的使用
Posted Cloud_Castle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中Q_PROPERTY定义属性以及属性的使用相关的知识,希望对你有一定的参考价值。
[cpp] view plain copy- Q_PROPERTY(type name
- READ getFunction //属性名
- [WRITE setFunction] //读函数
- [RESET resetFunction]
- [NOTIFY notifySignal]
- [DESIGNABLE bool]
- [SCRIPTABLE bool]
- [STORED bool]
- [USER bool]
- [CONSTANT]
- [FINAL])
其实不知道这个定义中属性name是干什么的,网上搜的都说是注册到元对象系统中,使用setProperty能够直接访问name,然后通常在类的私有成员里再定义一个m_name,用getFunction读m_name,用setFunction设置m_name,那这样子跟name有什么关系。
我是这样理解的,Q_PROPERTY只是一个声明,与name相关的是get/set这组函数,name虽然能在designer中直接使用,但还是通过get/set来实现的,其实name的值就是读函数get的返回值,不知道这样理解对不对,暂时这么理解,回头整理好了思路或者有更好的想法再来完善
上面说的类中定义的一个数据成员m_name,其实这个变量跟Q_PROPERTY定义的name没什么关系,name的值就是你read函数中的值,如果你在read函数关联了变量m_name,当然就name就与m_name有关系,如果没关联,当然也就没关系
在学习的过程中,一直找不到notify这个signal是在哪里发射的,学习了很久才发现自己一直都被绕进去了,现在终于想通了,这个signal的发射也是手动添加的,一般来说是在setFunction中发射的。
原来,getFunction/setFunction/notifySignal都是本来已经存在的东西也就是说是你自己在类里边定义的东西,Q_PROPERTY只是将他们注册到元对象系统中,并且起了个名字叫name,使之能够使用元对象系统操作name,包括在designer中,qml中,都可以直接用name这个属性,但是在C++中的读写只能使用get/set了
以上是关于Qt中Q_PROPERTY定义属性以及属性的使用的主要内容,如果未能解决你的问题,请参考以下文章
在没有 Q_PROPERTY 定义的情况下从 C++ 访问 QML 对象的属性