2016-03-18 52 views
3

假設我有一個ListView可點擊委託組件(或GridViewRepeater)。這些委託組件需要在觸發時發送信號以及自定義數據,並由ListView的父級挑選。如何實現這種信號綁定?如何綁定到來自QML中ListView中委託組件的信號

例如以下代碼是我的嘗試,但我不知道如何將代理組件的trigger信號綁定到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) 
     } 
    } 
} 

回答

5

你可以在Component.onCompleted處理兩種信號連接。

ListView { 
     id: myListView 
     width: 100 
     height: 600 

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

調用信號componentTriggered你也可以實現一個功能,但它取決於你的需求而不是:

使用你的代碼會是這樣的。信號在任何情況下都可以。

+0

這真的很棒。謝謝。我沒有意識到你可以在實例化或分配它的過程中實質性地擴展組件。 –

+0

恩,謝謝你:)快樂編碼! ;) – Tarod

相關問題