如何触发ColumnLayout重新布局?

时间:2017-04-25 00:00:17

标签: qt qml qt5 qtquick2

我有一些Text元素与textFormat: Text.RichText。当图像加载时,Text会展开,但布局不会重新计算,因此元素会重叠:

import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3

Item {
  ColumnLayout {
    Repeater {
      model: [1,2];
      delegate: Item {
        id: item;
        height: sample_col.height;
        ColumnLayout {
          id:sample_col
          Text { text: 'sample_col.height=' + sample_col.height + 
                       ' item.height=' + item.height; }
          Text {
            id: expanded_sample_html;
            textFormat: Text.RichText;
            text: '<img src="https://upload.wikimedia.org/wikipedia/commons/0/06/Kitten_in_Rizal_Park%2C_Manila.jpg">';
          }  
        }
      }
    }
  }
}

当图像最终下载到应用程序时,我看到:

enter image description here

因此,Text在加载图片后重叠,因为高度正确,但它并没有流向父ColumnLayout

如何触发顶部,父级ColumnLayout重绘?

1 个答案:

答案 0 :(得分:1)

使用布局类型时应使用附加的Layout属性。

必须显式创建声明性功能是一个好的迹象,缺少某些东西或者应该重构代码。

Flickable {
    anchors.fill: parent
    contentWidth: mainColumn.width
    contentHeight: mainColumn.height
    ColumnLayout {
        id: mainColumn
        Repeater {
            model: [1,2];
            delegate: Item {
                id: item;
                Layout.preferredWidth: sample_col.width
                Layout.preferredHeight: sample_col.height
                ColumnLayout {
                    id:sample_col
                    Text { text: 'sample_col.height=' + sample_col.height +
                                 ' item.height=' + item.height; }
                    Text {
                        id: expanded_sample_html;
                        textFormat: Text.RichText;
                        text: '<img src="https://upload.wikimedia.org/wikipedia/commons/0/06/Kitten_in_Rizal_Park%2C_Manila.jpg">';
                    }
                }
            }
        }
    }
}