如何在QML的ApplicationWindow中访问对象的objectNames ?



如何访问ApplicationWindow的子代objectName

WithApplicationWindow:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
id: head
visible: true
width: 640
height: 480
Rectangle{ height:1; width: 1; objectName: "AA"}
Rectangle{ height:1; width: 1; objectName: "BB"}
Component.onCompleted:
{
console.log("parent.data[0].objectName", head.data[0].objectName)
console.log("parent.data[1].objectName", head.data[1].objectName)
}
}

输出:

qml: parent.data[0].objectName ApplicationWindow
qml: parent.data[1].objectName 

WithWindow:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
Window {
id: head
visible: true
width: 640
height: 480
Rectangle{height:1; width: 1; objectName: "AA"}
Rectangle{height:1; width: 1; objectName: "BB"}
Component.onCompleted:
{
console.log("parent.data[0].objectName", head.data[0].objectName)
console.log("parent.data[1].objectName", head.data[1].objectName)
}
}

输出:

qml: parent.data[0].objectName AA
qml: parent.data[1].objectName BB

我们必须根据ApplicationWindow访问contentData,而不是data

Component.onCompleted:
{
console.log("parent.data[0].objectName", head.contentData[0].objectName)
console.log("parent.data[1].objectName", head.contentData[1].objectName)
}

: https://doc.qt.io/qt-5/qml-qtquick-controls2-applicationwindow.html contentData-prop

contentData: list

此默认属性保存声明为。的所有对象的列表窗口的子窗口。

data属性允许您自由地混合可视化子资源和应用程序窗口中的其他窗口

如果你将一个Item赋值给contentData列表,它就会成为窗口的内容项,以便它出现在窗口内。的item的父元素将是窗口的contentItem。

通常不需要引用contentData属性,因为它是ApplicationWindow的默认属性,因此所有子项都自动分配给此属性。

最新更新