Pab*_*uca 6 c++ macros qt properties member
我正在阅读关于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)
Run Code Online (Sandbox Code Playgroud)
使用READ/WRITE的示例:
Q_PROPERTY(int propX READ getX WRITE setX)
Run Code Online (Sandbox Code Playgroud)
通过仔细阅读文档,在我看来,存在轻微,重要的差异.
首先:
如果未指定READ访问器函数,则需要MEMBER变量关联.这使得给定成员变量可读写,而无需创建READ和WRITE访问器函数.
这意味着您可以使用MEMBER和依赖自动生成的,简单的访问器函数,也可以为这些函数定义这些函数,如果它们碰巧比默认函数更复杂.
换句话说,如果您的访问者功能完全相同,例如:
int propName() const { return prop; }
Run Code Online (Sandbox Code Playgroud)
因此,MEMBER很好.如果您有以下内容,则不会:
int propName() const { return superComplexMathUsedToComputeProp(); }
Run Code Online (Sandbox Code Playgroud)
另请注意:
READ,WRITE和RESET函数可以继承.它们也可以是虚拟的.
如果你正在处理一个层次结构,也许你希望它们被继承,那么可能会继续使用READ并且WRITE会更好.
哪个是最好的,使用什么取决于具体问题.
成员在 qt 元对象系统中仅创建 ReadProperty 和 WriteProperty 功能(请参阅生成的 moc 文件)。这对于与 QML 接口很有用。为了在 C++ 中使用属性,还必须实现 getter 和 setter。
所以 MEMBER -> 仅用于 QML READ、WRITE、NOTIFY -> C++ 和 QML
如果您想避免编写简单的 getter 和 setter,请定义您自己的 makro 包装 Q_PROPERTY。
| 归档时间: |
|
| 查看次数: |
5814 次 |
| 最近记录: |