我想从qml访问QList。这是示例代码
class A;
class B : public QObject {
...
Q_INVOKABLE QQmlListProperty<A> read();
...
private:
QList<A*> lst;
}
我正在使用context属性访问qml中的B类对象。如何访问qml中的列表。任何示例代码都会有所帮助。
您将需要Q_DECLARE_METATYPE(A *)
能够将其包装QVariant
在QML中使用。
但这只是为了引用QML并将其传递。
如果要A
像在C ++中一样在QML中使用,它将必须继承QObject
并实现属性,插槽等。
您可以在QQmlListProperty
此处查看如何实施:http : //doc.qt.io/qt-5/qtqml-referenceexamples-properties-example.html
另外,如果QObject
对您来说太沉重而又不实用,那么您总是可以使用一个QObject
派生对象QObject
作为非但仍注册为元类型类型的控制器。
class A {
public:
int a;
};
Q_DECLARE_METATYPE(A *)
class AProxy : public QObject {
Q_OBJECT
public slots:
int a(QVariant aVar) {
return aVar.value<A *>()->a;
}
void setA(QVariant aVar, int v) {
aVar.value<A *>()->a = v;
}
};
这样,您就没有QObject
列表中每个对象的大小开销和限制,并且可以使用单个控制器来访问数据,尽管性能较低。在您的情况下,您可以B
同时充当的容器和控制器代理A
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句