假设我有一个可单击的委托(delegate)组件的ListView
(或GridView
或Repeater
)。这些委托(delegate)组件在触发时需要与自定义数据一起发出信号,该信号可以由ListView
的父代拾取。如何实现信号绑定(bind)?
例如以下代码是我的尝试,但我不知道如何将委托(delegate)组件的trigger
信号绑定(bind)到componentTriggered
项中的root
信号?
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中绑定(bind)到ListView中的委托(delegate)组件的信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36082678/