如何绑定到QML中ListView中委托组件的信号
假设我有一个可单击的代理组件的如何绑定到QML中ListView中委托组件的信号,listview,qml,signals-slots,Listview,Qml,Signals Slots,假设我有一个可单击的代理组件的列表视图(或网格视图或中继器)。触发时,这些代理组件需要与自定义数据一起发出一个信号,列表视图的父级可以拾取该信号。如何实现这种信号绑定 e、 g.以下代码是我的尝试,但我不知道如何将代理组件的触发器信号绑定到根项中的组件触发器信号 Item { id: root anchors.fill: parent signal componentTriggered(string name) onComponentTriggered: {
列表视图
(或网格视图
或中继器
)。触发时,这些代理组件需要与自定义数据一起发出一个信号,列表视图的父级可以拾取该信号。如何实现这种信号绑定
e、 g.以下代码是我的尝试,但我不知道如何将代理组件的触发器
信号绑定到根
项中的组件触发器
信号
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 }
}
}
它访问delegate.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)
}
}
}
您可以在
组件.onCompleted
处理程序中连接这两个信号
使用您的代码,它将是这样的:
ListView {
id: myListView
width: 100
height: 600
model: myModel
delegate: TheDelegate {
name: model.name
Component.onCompleted: {
trigger.connect(root.componentTriggered)
}
}
}
您也可以实现一个函数,而不是调用信号
componentTriggered
,但这取决于您的需求。信号在任何情况下都正常。这真是太棒了。非常感谢。我没有意识到,在实例化或分配组件的过程中,您实际上可以扩展组件。