ChildrenRect 总是 returns 0
ChildrenRect always returns 0
我有一个 Flickable 项目,我想在其中放置自定义的流程组件,所以我创建了这样的 Flickable:
import QtQuick 2.0
import UICore.Layouts 1.0 as Layouts
Flickable{
anchors.fill: parent;
contentWidth: parent.width;
contentHeight: flow.childrenRect.height;
Component.onCompleted: {
console.log("The content height is: " + contentHeight);
}
}
然后在我的 main.qml 我有这个(上面的文件是 MyFlickable,而 MyFlow 是一个具有特定属性的流):
MyFlickable{
....
MyFlow{
id: flow
...
}
}
这很好用,但问题是我希望能够以尽可能少的开销重用该项目。在我的 MyFlow 中设置 id 不起作用,我试过这个
contentHeight: contentItem.childrenRect.height
如此处 contentWidth 部分的建议:http://doc.qt.io/qt-5/qml-qtquick-flickable.html#contentItem-prop
但总是 returns 0。我尝试了几种其他方法来接收 onCompleted 信号,但我也遇到了同样的运气。这不起作用,例如:
contentHeight: children[0].childrenRect.height
我认为这应该与通过 id 访问项目相同,但显然不是。
所以我的问题是:添加完所有组件后如何达到流程的高度?
提前致谢!
这将实现你想要的:
contentHeight: contentItem.children[0].childrenRect.height
来自Qt docs
Items declared as children of a Flickable are automatically parented to the Flickable's contentItem. This should be taken into account when operating on the children of the Flickable; it is usually the children of contentItem that are relevant.
但我必须说,组件对其自身 QML 文件之外的事物做出假设是不好的做法,因为这会使组件难以重用。具体来说,在这种情况下,Flickable 假设其第一个 child 是使用 childrenRect 属性 的组件类型。您的 MyFlow 组件有,但许多其他组件没有,例如图像。
我有一个 Flickable 项目,我想在其中放置自定义的流程组件,所以我创建了这样的 Flickable:
import QtQuick 2.0
import UICore.Layouts 1.0 as Layouts
Flickable{
anchors.fill: parent;
contentWidth: parent.width;
contentHeight: flow.childrenRect.height;
Component.onCompleted: {
console.log("The content height is: " + contentHeight);
}
}
然后在我的 main.qml 我有这个(上面的文件是 MyFlickable,而 MyFlow 是一个具有特定属性的流):
MyFlickable{
....
MyFlow{
id: flow
...
}
}
这很好用,但问题是我希望能够以尽可能少的开销重用该项目。在我的 MyFlow 中设置 id 不起作用,我试过这个
contentHeight: contentItem.childrenRect.height
如此处 contentWidth 部分的建议:http://doc.qt.io/qt-5/qml-qtquick-flickable.html#contentItem-prop
但总是 returns 0。我尝试了几种其他方法来接收 onCompleted 信号,但我也遇到了同样的运气。这不起作用,例如:
contentHeight: children[0].childrenRect.height
我认为这应该与通过 id 访问项目相同,但显然不是。
所以我的问题是:添加完所有组件后如何达到流程的高度?
提前致谢!
这将实现你想要的:
contentHeight: contentItem.children[0].childrenRect.height
来自Qt docs
Items declared as children of a Flickable are automatically parented to the Flickable's contentItem. This should be taken into account when operating on the children of the Flickable; it is usually the children of contentItem that are relevant.
但我必须说,组件对其自身 QML 文件之外的事物做出假设是不好的做法,因为这会使组件难以重用。具体来说,在这种情况下,Flickable 假设其第一个 child 是使用 childrenRect 属性 的组件类型。您的 MyFlow 组件有,但许多其他组件没有,例如图像。