gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:23:04 25 4
gpt4 key购买 nike

我有一个包含许多数据成员的 C++ 对象指针。我需要它们都在 QML 中可用。一种明显的方法是创建一个 Q_PROPERTY为每个成员,以便他们可以通过 QML 单独访问。但是,如果我们谈论的是数十个数据成员,那么 Q_PROPERTY 的行数就很多了。 ,更不用说必须在 QML 中将这些作为单独的属性单独处理(尤其是在处理每个属性的“更改”信号时)。

我想知道是否可以制作单个 Q_PROPERTY这将包括我需要的所有数据成员。但我不清楚 the types that QML supports 之间的明显不匹配。以及您可以在 Q_PROPERTY 中列出的类型.例如,在 QML 中,我们有一个基本的 string但它在 C++ 中的对应列表 Q_PROPERTY必须是 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 可能不需要解析任何东西。

最佳答案

Would there be more complex properties like lists or arrays that can be easily matched? QML has a list type and C++ has the QList but are these the same thing? Where can I find a listing of compatible types between C++ and QML?



看看 C++/JS data conversion help page .我认为列表错过了 QList<QObject*>也是可能的。

On the other hand, having individual Q_PROPERTY for each data member could likely be better performance (my data is large and often changing) since the QML would not need to parse anything, perhaps.



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

顺便说一句,使用 Qt 5.1 现在有 MEMBER ,这使得编写 Q_PROPERTY 更容易一些。

关于qt - 如何有效地将单个对象的多个 C++ 数据成员公开给 QML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20484295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com