我可以访问在 C++ 中声明为 MEMBER 的 QPROPERTY 吗?

Can I access a QPROPERTY declared as MEMBER in C++?

我有一个 QQuickItem class,其中一些成员在 QML 中使用,所以它们是这样声明的:

Q_PROPERTY (bool myBool MEMBER _myBool NOTIFY myBoolChanged)

如果我想用 C++ 代码访问这个成员(从另一个 class),我有 free get-accessor 吗?它的语法是什么?

我不清楚文档:

A MEMBER variable association is required if no READ accessor function is specified. This makes the given member variable readable and writable without the need of creating READ and WRITE accessor functions.

这是否使成员 可读可写 仅在 QML 或 C++ 中?

Qt 不会 创建 "C++" getter 或 setter。 使用 MEMBER,Qt MetaSystem 只能直接访问成员变量。

使用 MEMBER 关键字,将在 moc 文件中创建类似的内容:

Q_PROPERTY(int prop MEMBER m_prop NOTIFY propChanged) 
....
else if (_c == QMetaObject::ReadProperty) { 
void *_v = _a[0]; 
switch (_id) { 
case 0: *reinterpret_cast< int*>(_v) = m_prop; break; 
....

并且使用 READ 关键字将在 moc 文件中创建类似的内容:

Q_PROPERTY(int prop READ getProp NOTIFY propChanged) 
...
else if (_c == QMetaObject::ReadProperty) { 
void *_v = _a[0]; 
switch (_id) { 
case 0: *reinterpret_cast< int*>(_v) = getProp(); break; 
...

Qt 不会为您生成任何 C++ API getter,但是 属性 值可以通过 meta-object 系统生成 read 如果您想走那条路:

QMetaProperty prop = obj->metaObject()->property(...);
bool value = prop.read(obj).toBool();

除非您正在处理基于 meta-object 系统的通用内容,否则您可能需要定义一个普通的 getter 以便在 C++ 中使用。 Q_PROPERTY 的 MEMBER 关键字不是标准编程实践的捷径。