QML 容器控件:ScrollView

目录

1. ScrollView 简介

1.1 主要特点

2. 使用示例

2.1 简单的 ScrollView

2.2 使用 ListView作为子项

注意事项

总结


ScrollView是 QML 中用于创建可滚动视图的控件,它允许用户通过触摸或鼠标操作来滚动内容。ScrollView是 QtQuick.Controls模块的一部分,通常用于替代 Flickable或装饰现有的可滚动控件(如 ListView或 GridView)。以下是关于 ScrollView的详细介绍:


1. ScrollView 简介

ScrollView是一个用于显示可滚动内容的控件。它提供了滚动条,并支持触摸和鼠标交互。与 Flickable不同,ScrollView提供了更丰富的功能,例如内置的滚动条和更灵活的滚动策略。

1.1 主要特点

滚动功能  

ScrollView支持水平和垂直滚动,用户可以通过触摸滑动或鼠标拖动滚动条来滚动内容。

滚动条自定义  

可以通过 ScrollBar.horizontal和 ScrollBar.vertical附加属性自定义滚动条的外观和行为,包括滚动条的策略(如始终显示、始终隐藏或根据需要显示)。

内容大小管理  

  • 如果 ScrollView中只有一个子项,内容大小会自动根据子项的隐式大小计算。
  • 如果有多个子项或未提供隐式大小,则需要手动设置 contentWidth和 contentHeight。

触摸与鼠标交互  

  • 在触摸设备上,ScrollView支持快速滑动(flicking),滚动条不可交互。
  • 在鼠标交互时,滚动条变为可交互,滑动功能被禁用。

内容裁剪  

自 Qt 6.0 起,ScrollView默认会裁剪其内容,除非子项是 Flickable。如果需要禁用裁剪,可以显式设置子项的 clip属性。

滚动策略  

可以通过设置滚动条的 policy属性来控制滚动条的行为,例如:

  • ScrollBar.AlwaysOn:滚动条始终显示。
  • ScrollBar.AlwaysOff:滚动条始终隐藏。
  • ScrollBar.AsNeeded:根据内容大小动态显示滚动条。

属性

  • contentChildren:包含所有作为视图子项的可视元素。
  • contentData:包含所有作为视图子项的对象(包括非可视对象)。
  • effectiveScrollBarWidth:垂直滚动条的实际宽度(自 Qt 6.6 起)。
  • effectiveScrollBarHeight:水平滚动条的实际高度(自 Qt 6.6 起)。

2. 使用示例

以下是一些使用 ScrollView的示例:

2.1 简单的 ScrollView

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

Window {
    width: 300
    height: 300
    visible: true
    title: qsTr("Hello World")

    ScrollView {
        anchors.fill: parent

        ScrollBar.vertical.policy: ScrollBar.AlwaysOn
        ScrollBar.vertical.interactive: true

        ColumnLayout {
            anchors.fill: parent
            anchors.margins: 10

            Repeater {
                model: 20
                delegate: Text {
                    text: "Scroll me !"
                }
            }
        }
    }
}

这段代码创建了一个宽高均为300像素的窗口,窗口中包含一个垂直滚动的ScrollView,其内部通过ColumnLayout和Repeater动态生成了20个显示“Scroll me !”的文本项,滚动条始终显示且可交互。 

运行效果:

 


2.2 使用 ListView作为子项

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

Window {
    width: 300
    height: 300
    visible: true
    title: qsTr("Hello World")

    ScrollView {
        width: parent.width
        height: parent.height

        ListView {
            model: 20
            delegate: ItemDelegate {
                text: "Item " + index
                width: parent.width
            }
        }
    }
}

这段代码创建了一个宽高均为300像素的窗口,窗口中包含一个ScrollView,其内部通过ListView动态生成20个显示编号的ItemDelegate项,实现垂直滚动功能。 

运行效果:

 

注意事项

  • 如果内容大小小于或等于 ScrollView的大小,则不会显示滚动条。
  • 默认情况下,滚动条的策略是 ScrollBar.AsNeeded,即根据内容大小动态显示。

总结

ScrollView是一个功能强大的控件,用于创建可滚动的视图。它支持滚动条自定义、触摸和鼠标交互以及灵活的内容大小管理。通过结合 ScrollBar的附加属性,可以进一步增强其功能和用户体验。

参考:ScrollView QML Type | Qt Quick Controls 6.8.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值