我正在阅读 Qt 5.5 关于 Q_PROPERTY 宏的文档,但我不能很好地理解它。
据我所知,您可以在此宏中使用关键字 MEMBER 或访问器 READ/WRITE 来代替。如果您使用关键字 MEMBER,则不必编写访问器,因为您可以使用 setProperty() 和 Property() 来访问您的私有数据成员(属性),就像 set 和 get 一样。
重点是:使用MEMBER和使用READ/WRITE有什么区别吗?
什么时候应该使用一种方式,什么时候应该使用另一种方式?
如果有必要的话:
使用 MEMBER 的示例:
Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged)
使用读/写的示例:
Q_PROPERTY(int propX READ getX WRITE setX)
通过仔细阅读文档 http://doc.qt.io/qt-5/properties.html,在我看来,存在细微的、重要的差异。
首先:
如果未指定 READ 访问器函数,则需要 MEMBER 变量关联。这使得给定的成员变量可读可写,而无需创建 READ 和 WRITE 访问器函数。
这意味着您可以使用MEMBER
并依赖自动生成的、简单的访问器函数,或者如果这些函数恰好比默认函数更复杂,则为自己定义这些函数。
换句话说,如果您的访问器功能完全相同,例如:
int propName() const { return prop; }
Thus, MEMBER
很好。如果您有类似的情况,则不会:
int propName() const { return superComplexMathUsedToComputeProp(); }
另请注意:
READ、WRITE 和 RESET 功能可以继承。它们也可以是虚拟的。
如果您正在处理层次结构,也许您希望它们被继承,所以也许可以选择READ
and WRITE
会更好。
哪个是最好的以及使用什么取决于具体问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)