2

我有以下 QML 代码:

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2

Window {
    id: win
    width: 1024
    height: 768
    visible: true

    ScrollView {
        id:scrollView
        anchors.fill: parent
        Rectangle{
            id:rect
            z:5
            color:"red"
            width: 2048
            height: win.height
            border{
                color: "black"
                width: 2
            }
        }
    }
}

在此代码中,较大的Rectangle值使水平滚动条正确显示。但是,由于滚动条从窗口占用了一些高度,因此也会出现垂直滚动条。

我怎样才能使我的Rectangle填充只有可用空间,ScrollView这样垂直滚动条就不会出现?使用类似的东西win.height - <someNumber>不可接受的。添加verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff也是不可接受的,因为它会在rect.

4

1 回答 1

2

一般来说ScrollView,不适合这种用法。它更像是一个容器,用于布置项目并通过提供的滚动条显示它们。如果绑定设置不正确,绑定循环可能会在这里和那里弹出。此外Flickable+ 自定义滚动条(例如,此处可用的滚动条)可以完全满足您的需求。

也就是说,viewport属性为问题提供了所需的(跨平台)解决方法。该文档指出:

视口决定了 contentItem 上的当前“窗口”。换句话说,它会裁剪它,并且视口的大小会告诉您有多少内容区域是可见的

因此height,孩子的Item可以根据 的 来height设置viewport。最后一个带有Image(可爱的小猫传入)的简单示例如下所示:

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2

Window {
    id: win
    width: 300
    height: 300
    visible: true

    ScrollView {
        id:scrollView
        anchors.fill: parent

        Image{
            height: scrollView.viewport.height
            source: "http://c1.staticflickr.com/9/8582/16489458700_c9d82954b7_z.jpg"
        }
    }
}

在此处输入图像描述

于 2015-08-28T23:23:05.187 回答