gpt4 book ai didi

c++ - ObjectList/Repeater 的 QML DefaultProperty

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:34 25 4
gpt4 key购买 nike

我正在使用我自己的 C++ 小部件扩展 QML,使用 DefaultPropertyQQmlListProperty,例如 here .

这样我就可以写

Parent {    
Child { prop: "ch1" }
Child { prop: "ch2" }
Child { prop: "ch3" }
}

子对象附加到 QQmlListProperty 类型的成员属性.

但是当我想使用 Repeater像这样:

Parent {
Repeater {
model: ["ch1","ch2","ch3"]
delegate: Child {
prop: modelData
}
}
}

然后运行时给我一个错误:Cannot assign object to list property "childObjects"

如何设置我的 Parent 对象的列表属性,它是 Repeater?

编辑:我发现 Repeater 继承了 Item 并且只能重复 Items。但是我的 Child 对象继承了 QObject。所以我必须为 QObjects 创建一个 Repeater。但这不是问题。 Item 对象怎么会有一个手动编写的子项,以及一个给他很多子项的 Repeater 子项?

最佳答案

使用 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 ...)
...
}

然后您使用 Parentelements 属性作为转发器的模型,它将可以访问子元素的所有属性 (Q_PROPERTIES)。

Parent {
id: main
}
Repeater {
model: main.elements
delegate: Whatever { // will create one for each element
prop: something
prop2: myValue
}
}

关于c++ - ObjectList/Repeater 的 QML DefaultProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34059556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com