gpt4 book ai didi

qml - Flickable + 属性别名内容

转载 作者:行者123 更新时间:2023-12-01 12:38:26 65 4
gpt4 key购买 nike

我注意到继承 Flickable 的奇怪行为.

我有两个文件,Comp.qmlmain.qml .这个想法是 Comp 的任何 child 对象将是 Flickable 的 child 下 Comp .我已经默认使用内容

default property alias contents: flickable.children

但结果却很奇怪。

Comp.qml
Rectangle {
id: comp;
anchors.fill: parent

default property alias contents: flickable.children; // alias a default property
property int contentHeight: comp.height;

Flickable {
id: flickable;
anchors.fill: parent;
contentHeight: comp.contentHeight;
}
}

main.qml
Rectangle {
id: root;
width: 400;
height: 400;

Comp {
contentHeight: 800;


Rectangle { // <-- this rectangle should be a child of Flickable
width: 800;
height: 800;
border.color: "black";
border.width: 5;
Component.onCompleted: console.debug(parent)
}
}
}

可轻弹不起作用。

如果我尝试将其全部放在一个文件中,它会按预期工作:

main.qml
Rectangle {
id: root;
width: 400;
height: 400;

Rectangle {
id: comp;
anchors.fill: parent

Flickable {
id: flickable;
anchors.fill: parent;
contentHeight: 800;

Rectangle { // <-- the child component
width: 800;
height: 800;
border.color: "black";
border.width: 5;
}
}
}
}

我错过了什么吗?如何将外部组件添加到 Flickable ?

最佳答案

docs 中所述:

Items declared as children of a Flickable are automatically parented to the Flickable's contentItem. Items created dynamically need to be explicitly parented to the contentItem



这不是这里的第一个案例,即 Rectangle成为 Flickable 的 parent 本身并且不会暴露预期的行为。可能,除了 children在这种情况下,不会触发正确的育儿方式。作为快速修复,您可以在将项目添加到 Comp 后立即重新设置其父项。类型。

处理多个 Item s 在您的 Comp 中只需使用一个独特的 child (a la ScrollView)。这里我修改了例子来处理两个 Rectangle s(出于美观目的,刚刚将 clip 添加到 Comp )。

在主要:
Rectangle {
id: root;
width: 400;
height: 400;

Comp {
contentHeight: col.height;

Column {
id: col
spacing: 20
Rectangle {
width: 800;
height: 800;
border.color: "black";
border.width: 5;
}

Rectangle {
width: 800;
height: 800;
border.color: "black";
border.width: 5;
}
}

Component.onCompleted: console.debug(col.parent) // <-- not flickable
}
}

Comp.qml文件:
Rectangle {
id: comp;
anchors.fill: parent
default property alias contents: flickable.children;
property int contentHeight: comp.height;

Flickable {
z:1
clip: true // just my taste!
id: flickable;
anchors.fill: parent;
contentHeight: comp.contentHeight;
}

onContentsChanged: { // re-parenting
if(flickable.children[1] !== undefined)
flickable.children[1].parent = flickable.contentItem
}
}

关于qml - Flickable + 属性别名内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382064/

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