从 qml 访问 QList<T>

Access QList<T> from qml

我想从 qml 访问 QList。 这是一个示例代码

class A;
class B : public QObject {
   ...
   Q_INVOKABLE QQmlListProperty<A> read();
   ...
private:
   QList<A*> lst;
}

我正在使用上下文 属性 访问 qml 中 class B 的对象。 如何访问 qml 中的列表。任何示例代码都会有所帮助。

您需要 Q_DECLARE_METATYPE(A *) 才能将其包装在 QVariant 中以便在 QML 中使用。

但这只是为了在 QML 中引用和传递它。

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

您可以在此处查看如何实施 QQmlListPropertyhttp://doc.qt.io/qt-5/qtqml-referenceexamples-properties-example.html

另外,如果 QObject 对你来说太重而且不切实际而无法拥有很多,你总是可以使用单个 QObject 派生作为非 [=] 的控制器14=] 但仍注册为元类型。

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.

的容器和控制器代理