首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地将单个对象的许多C++数据成员公开给QML?

如何有效地将单个对象的许多C++数据成员公开给QML?
EN

Stack Overflow用户
提问于 2013-12-10 01:22:29
回答 1查看 1.4K关注 0票数 6

我有一个包含许多数据成员的C++对象指针。我需要他们所有的QML可用。一个明显的方法是为每个成员创建一个Q_PROPERTY,这样就可以通过QML单独访问它们。但是,如果我们讨论的是几十个数据成员,那么这是很多行Q_PROPERTY,更不用说在QML中单独处理这些数据成员了(特别是在处理每个属性的"on changed“信号时)。

我想知道是否有可能制作一个包含我需要的所有数据成员的单一Q_PROPERTY。但我不清楚的是,QML支持的类型与您可以在Q_PROPERTY中列出的类型之间明显的不匹配。例如,在QML中,我们有一个基本的string,但是它在C++ Q_PROPERTY中对应的lising必须是QString

代码语言:javascript
复制
 Q_PROPERTY(QString datastring READ showdata NOTIFY datastringChanged)
  //in QML, `datastring` is just a plain string

是否有更复杂的属性,如列表或数组,可以很容易地匹配?QML有list类型,C++有QList,但是这些是相同的吗?在哪里可以找到C++和QML之间兼容类型的列表?

另一方面,为每个数据成员设置单独的Q_PROPERTY可能会有更好的性能(我的数据很大,而且经常变化),因为QML可能不需要解析任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-10 17:42:25

是否有更复杂的属性,如列表或数组,可以很容易地匹配?QML有一个列表类型,C++有一个QList,但是这些是相同的吗?在哪里可以找到C++和QML之间兼容类型的列表?

看一看C++/JS数据转换帮助页面。我认为列表遗漏了QList<QObject*>也是可能的。

另一方面,为每个数据成员设置单独的Q_PROPERTY可能会有更好的性能(我的数据很大,而且经常变化),因为QML可能不需要解析任何东西。

也许,是的,取决于你的表现需要。当从QML/JS访问时,C++ QList被转换为JavaScript列表。这确实有点转换开销。另外,ff列表中的一个项会发生更改,您需要发出完整属性的通知信号,并且需要重新评估使用列表的每个JS绑定,这将再次是许多列表转换。如果拥有更细粒度的属性,这可能会更好,但这确实取决于。

顺便说一句,QT5.1现在有了MEMBER,这使得编写Q_PROPERTYs变得更容易了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20484295

复制
相关文章

相似问题

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