ObjectList / Repeater的QML DefaultProperty

时间:2015-12-03 06:52:46

标签: c++ qt qml

我正在使用我自己的小部件从Q ++扩展QML,DefaultPropertyQQmlListProperty,如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孩子给了他很多孩子?

1 个答案:

答案 0 :(得分:0)

使用QObjectList模型

你说你的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