QML 修改TableView和TreeView滚动条样式

摘要:
12:037anchors.bottom:controll.bottom38anchors.left:controll.left39policy:ScrollBar.AlwaysOn40onPositionChanged:{41controll.flickableItem.contentX=position*(controll.flickableItem.contentWidth)42}43}4445Connections{46target:controll.flickableItem47onContentXChanged:{48horizonBar.position=controll.flickableItem.contentX/49controll.flickableItem.contentWidth50}51}5253Connections{54target:controll.flickableItem55onContentYChanged:{56verticalBar.position=controll.flickableItem.contentY/57controll.flickableItem.contentHeight58}59}60}TableView控件:1importQtQuick2.02importQtQuick.Controls1.43importQtQuick.Controls.Styles1.44importQtQuick.Controls2.1256TableView{7id:controll89ScrollBar{10id:verticalBar11hoverEnabled:true12active:hovered||pressed13orientation:Qt.Vertical14size:controll.height/controll.flickableItem.contentHeight15visible:controll.__verticalScrollBar.visible16visible?

TreeView控件:

1 import QtQuick 2.9
2 import QtQuick.Controls 1.4
3 import QtQuick.Controls.Styles 1.4
4 import QtQml.Models 2.2
5 import QtQuick.Controls 2.12
6 
7 TreeView {
8 id:controll
9 anchors.fill: parent
10 
11 ScrollBar {
12 id: verticalBar
13         hoverEnabled: true
14         active: hovered ||pressed
15 orientation: Qt.Vertical
16         size: controll.height /controll.flickableItem.contentHeight
17 visible: controll.__verticalScrollBar.visible
18          visible ? 12 : 0
19 height: controll.height
20 anchors.top: controll.top
21 anchors.right: controll.right
22 policy: ScrollBar.AlwaysOn
23 onPositionChanged: {
24             controll.flickableItem.contentY = position *(controll.flickableItem.contentHeight)
25 }
26 }
27 
28 ScrollBar {
29 id: horizonBar
30         hoverEnabled: true
31         active: hovered ||pressed
32 orientation: Qt.Horizontal
33         size: controll.width /controll.flickableItem.contentWidth
34 visible: controll.__horizontalScrollBar.visible
35          controll.width -verticalBar.width
36         height: visible ? 12 : 0
37 anchors.bottom: controll.bottom
38 anchors.left: controll.left
39 policy: ScrollBar.AlwaysOn
40 onPositionChanged: {
41             controll.flickableItem.contentX = position *(controll.flickableItem.contentWidth)
42 }
43 }
44 
45 Connections{
46 target: controll.flickableItem
47 onContentXChanged: {
48             horizonBar.position = controll.flickableItem.contentX /
49 controll.flickableItem.contentWidth
50 }
51 }
52 
53 Connections {
54 target: controll.flickableItem
55 onContentYChanged: {
56             verticalBar.position = controll.flickableItem.contentY /
57 controll.flickableItem.contentHeight
58 }
59 }
60 }

TableView控件:

1 import QtQuick 2.0
2 import QtQuick.Controls 1.4
3 import QtQuick.Controls.Styles 1.4
4 import QtQuick.Controls 2.12
5 
6 TableView {
7 id: controll
8 
9 ScrollBar {
10 id: verticalBar
11         hoverEnabled: true
12         active: hovered ||pressed
13 orientation: Qt.Vertical
14         size: controll.height /controll.flickableItem.contentHeight
15 visible: controll.__verticalScrollBar.visible
16          visible ? 12 : 0
17 height: controll.height
18 anchors.top: controll.top
19 anchors.right: controll.right
20 policy: ScrollBar.AlwaysOn
21 onPositionChanged: {
22             console.log("vertical Bar Y Pos: " +controll.__model
23                         + " " +controll.rowDelegate.height
24                         + " " /*+ controll.positionViewAtRow(0, ListView.Beginning)*/)
25             controll.flickableItem.contentY = position * (controll.flickableItem.contentHeight) - (25 *f_adaptive_block_size_h)
26 }
27 }
28 
29 ScrollBar {
30 id: horizonBar
31         hoverEnabled: true
32         active: hovered ||pressed
33 orientation: Qt.Horizontal
34         size: controll.width /controll.flickableItem.contentWidth
35 visible: controll.__horizontalScrollBar.visible
36          controll.width -verticalBar.width
37         height: visible ? 12 : 0
38 anchors.bottom: controll.bottom
39 anchors.left: controll.left
40 policy: ScrollBar.AlwaysOn
41 onPositionChanged: {
42             controll.flickableItem.contentX = position *(controll.flickableItem.contentWidth)
43 }
44 }
45 
46 Connections{
47 target: controll.flickableItem
48 onContentXChanged: {
49             horizonBar.position = controll.flickableItem.contentX /
50 controll.flickableItem.contentWidth
51 }
52 }
53 
54 Connections {
55 target: controll.flickableItem
56 onContentYChanged: {
57             verticalBar.position = (controll.flickableItem.contentY + (25 * f_adaptive_block_size_h)) /
58 controll.flickableItem.contentHeight
59 }
60 }
61 }

修改的时候就在那两个ScrollBar里加样式一个 horizonBar,一个verticalBar,以下是个简单的例子:

1 import QtQuick 2.12
2 import QtQuick.Controls 2.12
3 import QtQuick.Controls.impl 2.12
4 
5 ScrollBar {
6 id: control
7 
8     property color handleNormalColor: "darkCyan"  //滑块颜色
9     property color backgroundBarColor: "white"       //背景颜色   
10 property color handleHoverColor: Qt.lighter(handleNormalColor)
11 property color handlePressColor: Qt.darker(handleNormalColor)
12 
13     implicitWidth: Math.max(implicitBackgroundWidth + leftInset +rightInset,
14                             implicitContentWidth + leftPadding +rightPadding)
15     implicitHeight: Math.max(implicitBackgroundHeight + topInset +bottomInset,
16                              implicitContentHeight + topPadding +bottomPadding)
17 
18     //滑块样式
19 contentItem: Rectangle {
20         implicitWidth: control.interactive ? 10 : 2
21         implicitHeight: control.interactive ? 10 : 2
22 
23         radius: width / 2
24 color: control.pressed
25                ?handlePressColor
26 :control.hovered
27                  ?handleHoverColor
28 :handleNormalColor
29 
30         opacity:(control.policy === ScrollBar.AlwaysOn || control.size < 1.0)?1.0:0.0
31 }
32 
33     //背景
34 background: Rectangle {
35         implicitWidth: control.interactive ? 10 : 2
36         implicitHeight: control.interactive ? 10 : 2
37 color: backgroundBarColor
38 }
39 }

研究不易啊,可以的话点个推荐,转载标个出处。

免责声明:文章转载自《QML 修改TableView和TreeView滚动条样式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇写好Java代码的30条经验总结(转)Linux /proc/$pid部分内容详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在页面布局中,怎么实现水平居中和垂直居中?

先给出DOM结构 <div class="box"><div class="box-center"> </div> </div> 一:水平居中 若是行内元素,给其父元素设置text-align:center即可实现行内元素水平居中 若是块级元素,该元素设置margin:0 auto即可(元素需要定宽...

CSS伪元素before和after

今天发现很多国外的网站和框架设计都用到了before和after,之前使用的比较少,今天试了下觉得还是很有意思的~ 说明 1. :before 和 :after将在内容元素的前后插入额外的元素;:before将会在内容之前“添加”一个元素而:after将会在内容后“添加”一个元素。在它们之中添加内容我们可以使用content属性。 2. :before 和...

移动端web页面使用position:fixed问题总结

近期完成了一个新的项目(搜狐直播),其中又涉及到了 fixed(固定位置定位)的问题,在之前的文章《移动Web产品前端开发口诀——“快”》中已经阐述过我对 iScroll 的态度,所以在这个项目中我决定不使用 iScroll,使用 position:fixed 实现头部、底部模块定位。在使用fixed的过程中,遇到了一些的问题,并且部分问题无法找到较好的解...

CSS之纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)

图形包括基本的矩形、圆形、椭圆、三角形、多边形,也包括稍微复杂一点的爱心、钻石、阴阳八卦等。当然有一些需要用到CSS3的属性,所以在你打开这篇文章的时候,我希望你用的是firefox或者chrome,当然IE也能看一部分的。那好,下面就一起来看看我们是如何用纯CSS来画这些图形的,如果你也觉得很震撼,推荐给你的朋友吧。 1、正方形 最终效果: CSS...

Android学习笔记之 SimpleAdapter 中添加按钮响应事件,getView的重写

Andriod 里面的ListView是一个显示列表数据的控件,常用适配器SimpleAdapter进行绑定,绑定代码如下: ListView lstView = (ListView) this.findViewById(R.id.listView1); SimpleAdapter adapter=new SimpleAdapter(context, d...

重温CSS:Border属性

边界是众所周知的,有什么新的东西吗?好吧,我敢打赌,在这篇文章中,有很多你不看永远不知道的东西! 不仅可以用CSS3来创建圆角,使用原有CSS一样可以显示自定义图形。这是正确的(有待考究);在过去,没发现这种技术之前,我们可能使用背景图像定位来显示一个园或箭头。幸运的是,我们能放下PS图象处理软件了。 基础 你可能很熟悉边的最基本用法。 1 borde...