如何绑定到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
,但这取决于您的需求。信号在任何情况下都正常。

这真是太棒了。非常感谢。我没有意识到,在实例化或分配组件的过程中,您实际上可以扩展组件。