gpt4 book ai didi

listview - 如何在 QML 中的 ListView 中绑定(bind)到来自委托(delegate)组件的信号

转载 作者:行者123 更新时间:2023-12-02 20:21:44 24 4
gpt4 key购买 nike

假设我有一个可点击委托(delegate)组件的 ListView(或 GridViewRepeater)。这些委托(delegate)组件需要在触发时发出信号和自定义数据,这些数据可以由 ListView 的父级拾取。这个信号绑定(bind)如何实现?

例如以下代码是我的尝试,但我不知道如何将委托(delegate)组件的 trigger 信号绑定(bind)到 root 中的 componentTriggered 信号项目?

Item {
id: root
anchors.fill: parent

signal componentTriggered(string name)

onComponentTriggered: {
console.log(name + ' component was triggered')
}

ListModel {
id: myModel

ListElement { name: "alpha" }
ListElement { name: "beta" }
ListElement { name: "gamma" }
ListElement { name: "delta" }
}

ListView {
id: myListView
width: 100
height: 600

model: myModel
delegate: TheDelegate { name: model.name }
}
}

访问TheDelegate.qml

import QtQuick 2.0

Rectangle {
id: root
width: 100
height: 50
color: "steelblue"
border.color: "white"
border.width: 2

property string name

signal trigger(string name)

Text {
anchors.centerIn: parent
text: model.name
}

MouseArea {
anchors.fill: parent
onClicked: {
console.log(root.name + ' clicked')
root.trigger(root.name)
}
}
}

最佳答案

您可以在 Component.onCompleted 处理程序中连接这两个信号。

使用您的代码,它会是这样的:

ListView {
id: myListView
width: 100
height: 600

model: myModel
delegate: TheDelegate {
name: model.name
Component.onCompleted: {
trigger.connect(root.componentTriggered)
}
}
}

您还可以实现一个函数,而不是调用信号componentTriggered,但这取决于您的要求。无论如何信号都是好的。

关于listview - 如何在 QML 中的 ListView 中绑定(bind)到来自委托(delegate)组件的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36082678/

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