我有一个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
但总是返回0.我已尝试了几种其他方式来接收onCompleted信号,但我得到了同样的运气。例如,这不起作用:
contentHeight: children[0].childrenRect.height
在我看来,这应该与通过id访问项目相同,显然不是。
所以我的问题是:在添加所有组件后,如何获得流量的高度?
提前致谢!
答案 0 :(得分:1)
这将实现你想要的目标:
contentHeight: contentItem.children[0].childrenRect.height
来自Qt docs
声明为Flickable子级的项目自动成为Flickable的contentItem的父级。在操作Flickable的孩子时应该考虑到这一点;它通常是contentItem的子项是相关的。
但我必须说,组件对自己的QML文件之外的事物进行假设是不好的做法,因为它使组件难以重用。特别是在这种情况下,Flickable假设其第一个子元素是使用childrenRect属性的Component类型。您的MyFlow组件可以,但许多其他组件不会,例如Image。