我试图了解QML (QtQuick2.0)中锚是如何工作的。我有一个这样简单的项目:
AddButton.qml:
Item {
Button {
text: "ADD"
width: 100
height: 50
}
}我将其添加到主要的QML文件中,如下所示:
main.qml:
Item {
id: root
width: 800
height: 600
AddButton {
id: addButton
}
}这个很好用。但是,当我试图使用锚将按钮放在右下角时,按钮就消失了:
main.qml:
Item {
.....
AddButton {
id: addButton
anchors.right: parent.right
anchors.bottom: parent.bottom
}
}只有当我在主QML文件级别设置宽度和高度时,它才会返回:
main.qml:
Item {
.....
AddButton {
id: addButton
width: 100
height: 50
anchors.right: parent.right
anchors.bottom: parent.bottom
}
}所以我想知道,为什么当我设置锚时按钮会消失呢?在不设置主QML文件中的宽度和高度的情况下,是否有任何方法使其工作(基本上是让它使用在AddButton.qml中设置的任何大小?)
发布于 2016-12-28 01:56:35
问题是封装Item没有显式的width height。在这种情况下,引擎引用“天然”witdh/高度,即implicitWidth/implicitHeight属性。这些属性在大多数情况下恰好为零,即使在这种特殊情况下也是如此。因此,您的自定义类型具有零维数。因此,AddButton.anchors.bottom实际上位于封装的Button的最顶端,这反过来又突出了封装的Item。
关于这一点有两件事:
您不需要使用项封装Button,除非您想隐藏Button的内部。
如果后者是您的愿望,请尝试如下:
Item {
width: 100 //give the object a dimension!
height: 50
Button {
text: "ADD"
anchors.fill: parent
}
}现在你可以锚定它了,它不会被定位在其他地方。
https://stackoverflow.com/questions/41352376
复制相似问题