用户名 立即注册 找回密码

微雪课堂

搜索
微雪课堂 树莓派 树莓派QT教程 查看内容

树莓派Qt系列教程15:滚动控件Scroll

2020-8-1 16:28| 发布者: dasi| 查看: 7634| 评论: 0|原作者: dasi

摘要: 这一节我们将学习滚动控件Scroll......

前言

当文字太多难以全部显示在界面上时,通常会用到滚动条,只显示少部分的文字,其余的文字需要滚动才能看到。这就运用到了滚动控件。我按照自己的方式将其分为了三类,我们依次来学习一下吧!

交互式滚动条ScrollBar

ScrollBar是一个交互式栏,可用于滚动到特定位置。滚动条可以是垂直或水平的,并且可以连接到任何Flickable。所谓交互式,简单理解就是与你的操作有没有互动,比如说当我们按压滚动条时,它立即显现并且可以对我们的操作做出反应,这个就是交互式的滚动条。

属性

  • active : bool,保存滚动条是否处于活跃状态
  • horizontal : bool,保存滚动条是否为水平
  • interactive : bool,保存滚动条是否为交互式。默认值为true
  • minimumSize : real,保存滚动条的最小大小
  • orientation : enumeration,保存滚动条的方向
  • policy : enumeration,保存滚动条的策略。默认策略是ScrollBar.AsNeeded

  • position : real,保存滚动条的位置
  • pressed : bool,保存是否按下滚动条
  • size : real,保存滚动条的大小
  • snapMode : enumeration,保留捕捉模式
  • stepSize : real,保存步长
  • vertical : bool,保存滚动条是否垂直
  • visualPosition : real,保留滚动条的有效视觉位置
  • visualSize : real,保留滚动条的有效视觉尺寸

方法

  • void decrease()
  • void increase()

例程学习

导入控件库

1import QtQuick.Layouts 1.3

在可视化对象中新增ScrollBar

01Rectangle {
02        id: frame
03        clip: true
04        width: 160
05        height: 160
06        border.color: "black"
07        anchors.centerIn: parent
08 
09        Text {
10            id: content
11            text: "ABC"
12            font.pixelSize: 160
13            x: -hbar.position * frame.width
14            y: -vbar.position * frame.height
15        }
16 
17        ScrollBar {
18            id: vbar
19            hoverEnabled: true
20            active: hovered || pressed
21            orientation: Qt.Vertical
22            size: frame.height / content.height
23            anchors.top: parent.top
24            anchors.right: parent.right
25            anchors.bottom: parent.bottom
26        }
27 
28        ScrollBar {
29            id: hbar
30            hoverEnabled: true
31            active: hovered || pressed
32            orientation: Qt.Horizontal
33            size: frame.width / content.width
34            anchors.left: parent.left
35            anchors.right: parent.right
36            anchors.bottom: parent.bottom
37        }
38    }

注意:当调用ScrollBar控件时,需要将clip设置为true,否则Text将全部显示。Text的x和y坐标加负号的原因是ScrollBar的position位置越大,Text里面的文本就要像相反方向移动的越多。

还有我们必须手动完成的操作

  • 布局滚动条(例如,使用x和y或anchors属性)
  • 设置大小和位置属性,以确定滚动条相对于滚动项的大小和位置
  • 设置active属性以确定滚动条何时可见

以vbar为例,设置当鼠标悬停或者按压滚动条时可见,设置其大小,范围在0.0-1.0之间,设置其布局在某一边上。看一下效果

非交互式滚动条ScrollIndicator

既然有交互式,那么必然会有非交互式,它不能对操作做出反应,所以自然属性也就少了很多。ScrollIndicator是一个非交互式指示器,用于指示当前滚动位置。滚动指示器可以是垂直或水平的,并且可以附加到任何Flickable上。

属性

  • active : bool,保存滚动条是否处于活跃状态
  • horizontal : bool,保存滚动条是否为水平
  • minimumSize : real,保存滚动条的最小大小
  • orientation : enumeration,保留捕捉模式
  • position : real,保存滚动条的位置
  • size : real,保存滚动条的大小
  • vertical : bool,保存滚动条是否垂直
  • visualPosition : real,保留滚动条的有效视觉位置
  • visualSize : real,保留滚动条的有效视觉尺寸

例程学习

01Rectangle {
02    id: frame
03    clip: true
04    width: 160
05    height: 160
06    border.color: "black"
07    anchors.centerIn: parent
08 
09    Text {
10        id: content
11        text: "ABC"
12        font.pixelSize: 169
13 
14        MouseArea {
15            id: mouseArea
16            drag.target: content
17            drag.minimumX: frame.width - width
18            drag.minimumY: frame.height - height
19            drag.maximumX: 0
20            drag.maximumY: 0
21            anchors.fill: content
22        }
23    }
24 
25    ScrollIndicator {
26        id: verticalIndicator
27        active: mouseArea.pressed
28        orientation: Qt.Vertical
29        size: frame.height / content.height
30        position: -content.y / content.height
31        anchors.top: parent.top
32        anchors.right: parent.right
33        anchors.bottom: parent.bottom
34    }
35 
36    ScrollIndicator {
37        id: horizontalIndicator
38        active: mouseArea.pressed
39        orientation: Qt.Horizontal
40        size: frame.width / content.width
41        position: -content.x / content.width
42        anchors.left: parent.left
43        anchors.right: parent.right
44        anchors.bottom: parent.bottom
45    }
46}

看上面的例程,大家可以和ScrollBar的例程比较一下,大部分的代码都是相同的,不同的地方在于因为没有交互性,所以我们设置其active时就不能选择pressed了,需要借助一个鼠标拖拽事件,目标为Text,同时设置active当鼠标被按下时可见。ScrollIndicator的position位置也是随着Text的拖动而改变的。运行看看效果,大家看看有啥区别。

滚动视图ScrollView

ScrollView提供用户定义内容的滚动。视图的概念先不和大家说了,等到后期拓展的时候再说,大家先了解一下ScrollView的用法就可以。

属性

  • contentChildren : list<Item>,保存内容子级列表
  • contentData : list<Object>,保存内容数据列表

例程学习

01ScrollView {
02    width: 200
03    height: 200
04    clip: true
05    anchors.centerIn: parent
06    Label {
07        text: "ABC"
08        font.pixelSize: 224
09    }
10}

大家自己运行一下,你会发现和上面两种的效果差不多。但是,实现原理是不一样的,前面两种是在可视化项目中定义了Text和滚动控件,必须设置滚动控件的位置等一些因素才可以实现滚动浏览的效果。而ScrollView是一种视图,我们只需要在视图中定义需要显示的控件,当控件的尺寸大于视图的大小时,视图会自动的增加水平和垂直方向的滚动条。

总结

源码:15.zip

关于滚动视图部分的内容,我们先不继续往下说了,大家可以重点关注一下前两种。建议大家还是仿照某个自己喜欢的界面,找找有没有这节课学习的内容,有的话就自己写代码实现它,这样学起来才能高效。OK,我们下节再会!

209

顶一下

刚表态过的朋友 (209 人)

相关阅读

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2025-4-15 07:11 , Processed in 0.014879 second(s), 13 queries .

返回顶部