从 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
并实现属性、槽等。
您可以在此处查看如何实施 QQmlListProperty
:http://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
.
的容器和控制器代理
我想从 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
并实现属性、槽等。
您可以在此处查看如何实施 QQmlListProperty
:http://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
.