为什么 Loader 不设置父级的宽度和高度?

Why doesn't Loader sets parent's width and height?

为什么,当我使用 Loader 加载组件时,widthheight 不是从父项复制的?

这段代码应该显示一个红色矩形,但它没有:

import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQuick.Controls.Material 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.3

Pane {
    width: 400
    height: 300
    Item {
        anchors.fill: parent

        Loader {
            sourceComponent: redsq
        }
    }
    Component {
        id: redsq
        Rectangle {
            //width: 100;
            //height: 40;
            anchors.fill:  parent
            color: "red"
        }
    }
}

现在,如果我取消 widthheight 的注释并注释 anchors 部分,它将正常工作:

Rectangle {
    width: 100;
    height: 40;
    //anchors.fill:  parent
    color: "red"
}

bin/qmlscene 的输出:

那么,这里的问题是什么,难道不是假设属性是由 property binding 系统传播的吗?还是 Loader 遗漏了某些功能?

默认情况下,加载器不被内容填充,也不假定内容的大小。

您可以将加载程序大小绑定到内容项大小,或者将内容项大小绑定到加载程序大小。

目前,您的加载程序的宽度和高度为零。所以填充它的任何项目也将具有零大小。为加载程序准备另一个 anchors.fill: parent,或者将 Item 替换为 Loader,因为前者是多余的。