我正在使用我自己的小部件从Q ++扩展QML,DefaultProperty
和QQmlListProperty
,如here。
这样我就可以写
了Parent {
Child { prop: "ch1" }
Child { prop: "ch2" }
Child { prop: "ch3" }
}
Child对象追加到QQmlListProperty类型的成员属性。
但是当我想使用Repeater这样的时候:
Parent {
Repeater {
model: ["ch1","ch2","ch3"]
delegate: Child {
prop: modelData
}
}
}
然后运行时给出了一个错误:Cannot assign object to list property "childObjects"
如何设置我的Parent对象的列表属性哪个是Repeater?
编辑:我发现Repeater
继承Item
并且只能重复项目。但我的Child
对象继承了QObject
。因此,我必须为Repeater
创建QObjects
。但那不是问题。 Item
对象如何有一个手动编写的子项,还有一个Repeater孩子给了他很多孩子?
答案 0 :(得分:0)
你说你的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 ...)
...
}
然后使用elements
的{{1}}属性作为转发器的模型,它将可以访问子元素的所有属性(Q_PROPERTIES)。
Parent