如何让装载机不再填充其父级?

时间:2016-04-13 06:08:13

标签: qt qml qtquick2

我的主QML文件中有一个Loader对象。我在运行时根据当前上下文在加载器中加载不同的QML源。

我的步骤是这样的:

  1. 加载login.qml文件并在Loader上设置anchors.centerIn: parent
  2. 成功登录后,我加载task.qml,然后在Loader上设置anchors.fill: parent
  3. 用户退出后,我想重定向回login.qml,然后在装载程序上再次设置anchors.centerIn: parent
  4. 我希望这会导致Loader在父级中居,不再填充它。然而,这种情况并非如此。装载机仍然填充父母。

    如何更改项目上的锚点,使其再次居中,不再填充其父级?

1 个答案:

答案 0 :(得分:1)

您无需再次设置anchors.centerIn。相反,您需要将anchors.fillwidth以及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中居中。这样就无需更改装载机上的锚点。