QML 滚动视图与 ColumnLayout

QML ScrollView with ColumnLayout

我正在尝试围绕 ColumnLayout 创建滚动视图,不幸的是我当前的代码不起作用。我知道 ListView,但在我的例子中,我需要创建可滚动的布局,因为它将包含异构元素。

ApplicationWindow {
    id: mainwindow
    title: qsTr("Hello World")
    width: 300
    height: 300
    visible: true

    ScrollView {
        anchors.fill: parent

        ColumnLayout {
            width: mainwindow.width

            Image {
                anchors.bottomMargin: 10
                source: "img/button.jpg"
                width: parent.width
                height: 400
            }

            Image {
                source: "img/button.jpg"
                width: parent.width
                height: 500
            }
        }
    }
}

这样渲染(这显然不是我想要的):

有两个问题:

  1. 图像没有拉伸到整个 window 宽度,parent.width 被忽略。我希望图像具有与 ScrollView 完全相同的宽度(无水平滚动)
  2. 图像高度 属性 被忽略

我做错了什么?

我会使用普通列并直接通过 id 访问所需的宽度 属性。据我了解,这些容器元素根据其内容测量其大小,这可能是设置 ColumnLayouts 宽度无效的原因。

这对我有用:

ScrollView 
{
    anchors.fill: parent

    Column {

        Repeater {
            model: 4;
            delegate: Item {
                width: root.width;
                height: image.sourceSize.height;

                Image {
                    id: image;
                    anchors.centerIn: parent;
                    width: parent.width;
                    fillMode: Image.Stretch;
                    source: "img" + (index+1) + ".png"
                }
            }
        }
    }
}

在我的例子中,root 只是 parent 的 ID。希望这对您有所帮助!

我这边也有同样的问题。这对我有用:

ScrollView {
    width: parent.width
    height : parent.height
    contentWidth: column.width    // The important part
    contentHeight: column.height  // Same
    clip : true                   // Prevent drawing column outside the scrollview borders

    Column {
        id: column
        width: parent.width

        // Your items here
    }
}