gpt4 book ai didi

qt - 带有 id 的 Qml 中继器

转载 作者:行者123 更新时间:2023-12-04 13:02:18 25 4
gpt4 key购买 nike

如果写了如下代码:

Repeater { model: 10; 
delegate: Rectangle { width: 200; height:
20; color: "white";}}

我怎样才能给所有 10 个矩形一个不同的 id?

最佳答案

根据你想做什么,你可以

A. 从​​它的索引访问项目

您可以使用 itemAt 访问元素的索引。转发器的方法,如@eyllanesc 所示。小心,因为委托(delegate)可能还没有被实例化。

    Repeater { 
id: repeater
model: 5

Component.onCompleted: {
if (repeater.count > 0) {
var firstRect = repeater.itemAt(0)
// do something
}
}

Rectangle { /*...*/ }
}

B. 使用 itemAdded信号

您可以连接到 itemAdded Repeater 的信号.每当添加项目时都会触发此信号(当然),并将提供项目 indexitem .
    Repeater { 
id: repeater
model: 5

property Item firstRect

onItemAdded: {
// `index` and `item` come from the signal
if (index == 0) {
firstRect = item
// Or do something with item
}
}

Rectangle { /*...*/ }
}

C. 委托(delegate)将自己分配给一个属性

您可以让矩形将自己分配给在其 parent 之一中声明的属性。这通常不是首选,因为您的委托(delegate)现在依赖于该命名属性,但它可能很有用。
    Repeater { 
id: repeater
model: 5

// That property can be anywhere
property Item firstRect

Rectangle {
id: rect
width: 50; height: 50;
Component.onCompleted: {
// Index is automatically populated by the Repeater
if (index == 0)
repeater.firstRect = rect
}
}
}

大多数时候,您希望避免委托(delegate)对 parent 的任何依赖,因此首选解决方案 A 和 B。但这总是取决于!

关于qt - 带有 id 的 Qml 中继器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308872/

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