gpt4 book ai didi

QT QML 从另一个 QML 对象访问附加属性

转载 作者:行者123 更新时间:2023-12-05 03:04:04 45 4
gpt4 key购买 nike

主.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 实例化的 View 。 StackView 将信号 StackView.onDeactivating 附加到 View 。除了信号所连接的对象之外,是否有任何方法可以连接到来自其他对象的信号?弹出 View 时,我需要在 listViewDelegate 中进行一些清理。

我可以让 View 发出自己的信号,并让委托(delegate)响应该信号。但我想知道是否有一种方法可以连接到附加信号:StackView.onDeactivating 来自不同的对象 (listViewDelegate)。

最佳答案

是也不是。 Qt 文档部分解决了这个问题:A Note About Accessing Attached Properties and Signal Handlers

不可能直接从 child 那里访问该属性。附加属性需要由提供它们的类显式读取。对于您的示例,父类 (StackView) 在添加后立即搜索它在子项 (FirstView) 中提供的所有附加属性,并处理所有通过在内部将它们连接到提供它们的任何逻辑来找到属性/信号等。

但是,只要您通过 id 引用它,没有什么能阻止您从父项获取附加属性:

sampleProp: view.StackView.someProperty

问题是:这种间接访问仅适用于属性而不适用于信号,因为您不能简单地通过 view.StackView 引用附加对象 - 很遗憾,您被卡住了通过在根项中创建第二个信号并在附加信号被发射时发射它,间接将信号转发给子元素。

关于QT QML 从另一个 QML 对象访问附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53241975/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com