gpt4 book ai didi

qt - 根据属性(property)选择委托(delegate)

转载 作者:行者123 更新时间:2023-12-01 23:54:35 28 4
gpt4 key购买 nike

我有一个 ListView ,我想根据属性的值在其中使用 defaultDelegate 或 customDelegate。到目前为止,我已经尝试使用一个组件来加载不同的委托(delegate):

 Component{
id: delegate
Loader {
sourceComponent: type == 3 ? customDelegate : defaultDelegate
}
}

但是,我无法从我拥有的两个委托(delegate)访问模型中的属性。我有以下错误:

ReferenceError: name is not defined

这是我使用的模型:

ListModel {
id: test
ListElement {
name: "Bill"
team: "554"
type: 2
}
ListElement {
name: "John"
team: "555"
type: 3
}
ListElement {
name: "Sam"
team: "556"
type: 1
}
}

有人知道我在这里做错了什么吗?

最佳答案

当然,这是一个上下文问题。在您的代码中,ListViewnameteamtype 上下文属性插入到 delegate 的上下文对于您的委托(delegate)中的组件是不可访问的,因为 Loader 使用 customDelegatedefaultDelegate 的创建上下文作为父级实例化它们时的上下文,nameteamtype 不引用该上下文链中的任何内容。一种解决方案是将所需信息显式设置为 Loader 的属性(之所以可行,是因为 Loader 将自身设置为它正在加载的组件的上下文对象)。

下面是一个工作示例:

ListModel {
id: testModel
ListElement {
name: "Bill"
team: "554"
type: 2
}
ListElement {
name: "John"
team: "555"
type: 3
}
ListElement {
name: "Sam"
team: "556"
type: 1
}
}

ListView {
anchors.fill: parent
model: testModel

delegate: myDelegate
}

Component {
id: myDelegate // yourDelegate
Loader {
property string modelName: model.name
property string modelTeam: model.team
property int modelType: model.type
sourceComponent: modelType === 3 ? colonDelegate : semicolonDelegate
}
}

Component {
id: colonDelegate
Text { text: modelName + ": " + modelTeam }
}

Component {
id: semicolonDelegate
Text { text: modelName + "; " + modelTeam }
}

为了进一步阅读和改进,我强烈建议您阅读 this .

关于qt - 根据属性(property)选择委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24784706/

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