[英]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.