我有一个包含许多数据成员的C++对象指针。我需要他们所有的QML可用。一个明显的方法是为每个成员创建一个Q_PROPERTY,这样就可以通过QML单独访问它们。但是,如果我们讨论的是几十个数据成员,那么这是很多行Q_PROPERTY,更不用说在QML中单独处理这些数据成员了(特别是在处理每个属性的"on changed“信号时)。
我想知道是否有可能制作一个包含我需要的所有数据成员的单一Q_PROPERTY。但我不清楚的是,QML支持的类型与您可以在Q_PROPERTY中列出的类型之间明显的不匹配。例如,在QML中,我们有一个基本的string,但是它在C++ Q_PROPERTY中对应的lising必须是QString。
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可能不需要解析任何东西。
发布于 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变得更容易了。
https://stackoverflow.com/questions/20484295
复制相似问题