2017-01-08 15 views
1

Почему, когда я загружаю компонент с Loader, width и height не копируются из родительского элемента?Почему Loader не устанавливает ширину и высоту родителя?

Этот код должен показать красный прямоугольник, но это не делает:

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" 
     } 
    } 
} 

Теперь, если я раскомментировать width и height и комментировать 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

_Погрузчик не заполняется содержимым по умолчанию и не принимает размер содержимого по умолчанию. Это не совсем так: [поведение размера загрузчика] (http://doc.qt.io/qt-5 /qml-qtquick-loader.html#loader-sizing-behavior). Однако для якорей для работы они должны быть на загрузчике. – GrecKo