我的主QML文件中有一个Loader对象。我在运行时根据当前上下文在加载器中加载不同的QML源。
我的步骤是这样的:
login.qml
文件并在Loader上设置anchors.centerIn: parent
。task.qml
,然后在Loader上设置anchors.fill: parent
。 login.qml
,然后在装载程序上再次设置anchors.centerIn: parent
。我希望这会导致Loader在父级中居,不再填充它。然而,这种情况并非如此。装载机仍然填充父母。
如何更改项目上的锚点,使其再次居中,不再填充其父级?
答案 0 :(得分:1)
您无需再次设置anchors.centerIn
。相反,您需要将anchors.fill
和width
以及height
设置为undefined
,以便默认为隐式大小,并再次使用anchors.centerIn
属性。
这是一个有效的例子:
import QtQuick 2.0
import QtQuick.Controls 1.0
Item {
width: 800
height: 600
Rectangle {
id: rect
anchors.centerIn: parent
implicitWidth: 500
implicitHeight: 200
color: "red"
Button {
text: "Toggle Full Size"
anchors.centerIn: parent
onClicked: {
if (rect.anchors.fill) {
rect.anchors.fill = undefined
rect.width = undefined
rect.height = undefined
} else {
rect.anchors.fill = rect.parent
}
}
}
}
}
或者,更简单的解决方案可能是让您的Loader始终填充其父级,而是在login.qml
文件的顶级添加一个额外的Item,以便登录视图在此Item中居中。这样就无需更改装载机上的锚点。