2017-01-08 43 views
1

为什么当我加载组件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的输出:

Loader works correctly

那么,这里有什么问题,是不是应该通过property binding系统来传播属性?还是Loader错过了某些功能?

回答

1

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

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

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

+2

_默认情况下,加载器并未被内容填充,也不是默认情况下内容的大小。这并非完全正确:[loader size behavior](http://doc.qt.io/qt-5 /qml-qtquick-loader.html#loader-sizing-behavior)。对于锚点工作,他们必须在装载机上。 – GrecKo

相关问题