繁体   English   中英

访问QList <T> 来自qml

[英]Access QList<T> from qml

我想从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。

如果要像在C ++中一样在QML中使用A ,它将必须继承QObject并实现属性,插槽等。

您可以在此处查看如何实现QQmlListPropertyhttp : QQmlListProperty

另外,如果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容器和控制器代理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM