我正在阅读关于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
会更好.
哪个是最好的,使用什么取决于具体问题.
通过仔细阅读文档,在我看来,存在轻微,重要的差异.
首先:
如果未指定READ访问器函数,则需要MEMBER变量关联.这使得给定成员变量可读写,而无需创建READ和WRITE访问器函数.
这意味着您可以使用MEMBER
和依赖自动生成的,简单的访问器函数,也可以为这些函数定义这些函数,如果它们碰巧比默认函数更复杂.
换句话说,如果您的访问者功能完全相同,例如:
int propName() const { return prop; }
因此,MEMBER
很好.如果您有以下内容,则不会:
int propName() const { return superComplexMathUsedToComputeProp(); }
另请注意:
READ,WRITE和RESET函数可以继承.它们也可以是虚拟的.
如果你正在处理一个层次结构,也许你希望它们被继承,那么可能会继续使用READ
并且WRITE
会更好.
哪个是最好的,使用什么取决于具体问题.