首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以访问C++中声明为成员的QPROPERTY吗?

我可以访问C++中声明为成员的QPROPERTY吗?
EN

Stack Overflow用户
提问于 2018-02-26 10:33:04
回答 2查看 998关注 0票数 1

我有一个QQuickItem类,在QML中使用了一些成员,因此它们声明如下:

代码语言:javascript
复制
Q_PROPERTY (bool myBool MEMBER _myBool NOTIFY myBoolChanged)

如果我想访问C++代码中的这个成员(来自另一个类),那么我是否有一个免费的访问器?它的语法是什么?

医生对我不清楚:

如果没有指定读访问器函数,则需要成员变量关联。这使得给定的成员变量具有可读性和可写性,而无需创建读写访问器函数。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-26 10:54:23

Qt不为您生成任何C++ API getter,但是如果您想这样做,则属性值可以是通过元对象系统生成的朗读

代码语言:javascript
复制
QMetaProperty prop = obj->metaObject()->property(...);
bool value = prop.read(obj).toBool();

除非您正在基于元对象系统进行一些通用的工作,否则您可能需要定义一个用于C++的普通getter。Q_PROPERTY的成员关键字不是围绕标准编程实践的快捷方式。

票数 3
EN

Stack Overflow用户

发布于 2018-02-26 10:54:09

Qt 创建"C++“getter或setter。对于成员,Qt MetaSystem只能直接访问成员变量。

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

代码语言:javascript
复制
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文件中创建类似的内容:

代码语言:javascript
复制
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; 
...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48986373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档