QML在Component中使用createObject填充ColumnLayout
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QML在Component中使用createObject填充ColumnLayout相关的知识,希望对你有一定的参考价值。
我想在TabView / Tab中动态地向ComponentLayout添加一个Component。但我没有找到这样做的可能性。问题是我对我的ColumnLayout没有对createObject调用的正确父引用。因为Tab动态加载了一个Component,所以我将ColumnLayout封装在一个Component中。
在QML调试器中,我可以解决以下路径:objForm.tabView.tabStatus.tabStatusLoader.colLayout,但我无法将其用作正确的父级。
它似乎不在范围内。
TypeError: Cannot read property 'tabStatus' of undefined
ObjForm.ui.qml
Item {
id: item1
width: 400
height: 400
property QtObject object
property Component compLayout
TabView {
id: tabView
anchors.fill: parent
Tab {
id: tabStatus
title: "status"
Loader {
id: tabStatusLoader
sourceComponent: compLayout
}
}
}
}
ObjForm.qml
ObjectViewForm {
id: objForm
anchors.fill: parent
object: someObj
compLayout: Component {
id: layoutComp
ColumnLayout {
id: colLayout
spacing: 2
}
}
onObjectChanged: {
// Here i want to add the someLabel Component to the ColumnLayout
someLabel.createObject(*PARENT*)
}
Component {
id: someLabel
Row {
property string text
property string label
spacing: 5
Label {
text: parent.label
}
Label {
text: parent.text
}
}
}
有谁知道如何解决这个问题或者可以提出更好的建议?
好的,我自己找到了解决方案。而不是将ColumnLayout包含到Component中,我已将其拉出并创建了一个别名属性来发布它。有了这个,可以将对象添加到我的ColumnLayout。但是ColumnLayout得到了错误的父(objForm)而不是Component。
组件不能是父组件,因为预期QQuickItem *而不是QObject *,并且除了'id'之外,其他组件不能包含属性。因此需要一个虚拟物品。
要重新显示ColumnLayout,Item需要一个Component.onCompleted函数,其中将设置父级。
ObjectViewForm {
id: objForm
anchors.fill: parent
object: someObj
property alias componentLayout: colLayout
compLayout: Component {
id: layoutComp
Item {
id: dummy
Component.onCompleted: {
colLayout.parent = dummy
}
}
}
ColumnLayout {
id: colLayout
spacing: 2
}
以上是关于QML在Component中使用createObject填充ColumnLayout的主要内容,如果未能解决你的问题,请参考以下文章
在 Component.onCompleted 之前初始化 QML 信号
在 qml 中使用 createComponent 但状态总是错误