当前位置:  开发笔记 > 编程语言 > 正文

Q_PROPERTY:MEMBER vs READ/WRITE

如何解决《Q_PROPERTY:MEMBERvsREAD/WRITE》经验,为你挑选了1个好方法。

我正在阅读关于Q_PROPERTY宏的Qt 5.5的文档,但我无法理解它.

我知道您可以在此宏中使用关键字MEMBER或访问者READ/WRITE代替.如果使用关键字MEMBER,则不必编写访问者,因为您可以使用setProperty()和Property()来访问您的私有数据成员(属性),就像set和get一样.

关键是:使用MEMBER和使用READ/WRITE之间有什么区别吗?什么时候应该使用一个而另一个方式?

如有必要:

使用MEMBER的示例:

Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged)

使用READ/WRITE的示例:

Q_PROPERTY(int propX READ getX WRITE setX)

skypjack.. 8

通过仔细阅读文档,在我看来,存在轻微,重要的差异.

首先:

如果未指定READ访问器函数,则需要MEMBER变量关联.这使得给定成员变量可读写,而无需创建READ和WRITE访问器函数.

这意味着您可以使用MEMBER和依赖自动生成的,简单的访问器函数,也可以为这些函数定义这些函数,如果它们碰巧比默认函数更复杂.

换句话说,如果您的访问者功能完全相同,例如:

int propName() const { return prop; }

因此,MEMBER很好.如果您有以下内容,则不会:

int propName() const { return superComplexMathUsedToComputeProp(); }

另请注意:

READ,WRITE和RESET函数可以继承.它们也可以是虚拟的.

如果你正在处理一个层次结构,也许你希望它们被继承,那么可能会继续使用READ并且WRITE会更好.

哪个是最好的,使用什么取决于具体问题.



1> skypjack..:

通过仔细阅读文档,在我看来,存在轻微,重要的差异.

首先:

如果未指定READ访问器函数,则需要MEMBER变量关联.这使得给定成员变量可读写,而无需创建READ和WRITE访问器函数.

这意味着您可以使用MEMBER和依赖自动生成的,简单的访问器函数,也可以为这些函数定义这些函数,如果它们碰巧比默认函数更复杂.

换句话说,如果您的访问者功能完全相同,例如:

int propName() const { return prop; }

因此,MEMBER很好.如果您有以下内容,则不会:

int propName() const { return superComplexMathUsedToComputeProp(); }

另请注意:

READ,WRITE和RESET函数可以继承.它们也可以是虚拟的.

如果你正在处理一个层次结构,也许你希望它们被继承,那么可能会继续使用READ并且WRITE会更好.

哪个是最好的,使用什么取决于具体问题.


这个答案是错误的:MEMBER根本不是一般的琐碎的getter和setter.
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有