[英]QT QML Accessing Attached Property From Another QML Object
main.qml:
import QtQuick 2.11
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
ApplicationWindow {
id: window
x: 200
y: 200
visible: true
Component {
id: firstViewComponent
FirstView {
id: firstView
}
}
StackView {
id: stackView
anchors.fill: parent
Component.onCompleted: push(firstViewComponent)
}
Timer {
interval: 1000
running: true
onTriggered: stackView.pop()
}
}
FirstView.qml:
Rectangle {
id: view
StackView.onDeactivating: console.log('view: view is deactivating')
ListModel {
id: aModel
ListElement {
name: 'Element 0'
}
ListElement {
name: 'Element 1'
}
}
ListView {
id: listView
model: aModel
delegate: Rectangle {
id: listViewDelegate
Connections {
target: view.StackView // <---- DOESN'T WORK
onDeactivating: console.log('delegate ' + index + ': needs to do some housekeeping now')
}
}
}
}
我有一個視圖由main.qml中的StackView實例化。 StackView將信號StackView.onDeactivating附加到視圖。 除了信號所附加的對象之外,還有其他方法可以附加到來自對象的信號嗎? 彈出視圖時,我需要在listViewDelegate中進行一些清理。
我可以讓視圖發出自己的信號,並讓委托響應該信號。 但是我想知道的是,是否有一種方法可以連接到附加信號:從另一個對象(listViewDelegate)調用StackView.onDeactivating。
是的,沒有。 Qt文檔部分解決了此問題: 關於訪問附加屬性和信號處理程序的說明
不能直接從孩子那里訪問酒店。 附加屬性需要由提供它們的類顯式讀取。 在您的示例中,父類( StackView
)會在添加后立即在子項( FirstView
)中搜索它確實提供的所有附加屬性,並通過將它們內部連接到提供的任何邏輯來處理所有找到的屬性/信號等。他們。
但是,只要您通過id引用它,什么都不會阻止您從父項獲取附加屬性:
sampleProp: view.StackView.someProperty
事實是:這種間接訪問僅對屬性和信號都有效,因為您不能簡單地通過view.StackView
引用附加的對象-不幸的是,您只能通過view.StackView
間接地將信號轉發給子元素:在根項目中創建第二個信號,並在發出附加信號時發出它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.