我正在使用我自己的小部件从c ++扩展QML,DefaultProperty和QQmlListProperty,就像这里一样.
这样我就可以写了
Parent {
Child { prop: "ch1" }
Child { prop: "ch2" }
Child { prop: "ch3" }
}
Run Code Online (Sandbox Code Playgroud)
Child对象追加到QQmlListProperty类型的成员属性.
但是当我想使用这样的Repeater:
Parent {
Repeater {
model: ["ch1","ch2","ch3"]
delegate: Child {
prop: modelData
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行时给了我一个错误: Cannot assign object to list property "childObjects"
如何设置Repeater的Parent对象的list属性?
编辑:我发现,Repeater继承Item并且只能重复项目.但是我的Child对象继承了QObject.所以我必须创建一个Repeaterfor QObjects.但那不是问题.Item对象如何有一个手动编写的子项,还有一个Repeater孩子给了他很多孩子?
你说你Child是 QObjects,那么你可以使用 QObjectList而不是你的构造。使用类似于以下内容的内容公开列表:
class Parent : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<QObject*> elements READ ... WRITE ... NOTIFY ...)
}
class Child : public QObject
{
Q_OBJECT
Q_PROPERTY(QString something READ ... WRITE ... NOTIFY ...)
Q_PROPERTY(int myValue READ ... WRITE ... NOTIFY ...)
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您使用elements的属性Parent作为中继器的模型,它将可以访问子元素的所有属性 (Q_PROPERTIES)。
Parent {
id: main
}
Repeater {
model: main.elements
delegate: Whatever { // will create one for each element
prop: something
prop2: myValue
}
}
Run Code Online (Sandbox Code Playgroud)