自定义 QTreeView

自定义 QTreeView自定义QTreeView交替行的背景色可以使用下面样式代码来定义:QTreeView{alternate-background-color:yellow;}123123当鼠标划过item时,如果要提供一个特殊的背景色,可以使用 ::item 辅助控制,例如:QTreeView{show-decoration-selected:1;}

大家好,又见面了,我是你们的朋友全栈君。



自定义 QTreeView

交替行的背景色可以使用下面样式代码来定义:

QTreeView { alternate-background-color: yellow; }
 
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

当鼠标划过 item 时,如果要提供一个特殊的背景色,可以使用 ::item 辅助控制,例如:

QTreeView { show-decoration-selected: 1; }

QTreeView::item { border: 1px solid #d9d9d9; border-top-color: transparent; border-bottom-color: transparent; }

QTreeView::item:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1); border: 1px solid #bfcde4; }

QTreeView::item:selected { border: 1px solid #567dbc; }

QTreeView::item:selected:active{ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc); }

QTreeView::item:selected:!active { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6b9be8, stop: 1 #577fbf); }
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

QTreeView 的分支可以使用 ::branch 辅助控制。当绘制一个 branch 时,下述的样式颜色实现了一系列状态。

QTreeView::branch { background: palette(base); }

QTreeView::branch:has-siblings:!adjoins-item { background: cyan; }

QTreeView::branch:has-siblings:adjoins-item { background: red; }

QTreeView::branch:!has-children:!has-siblings:adjoins-item { background: blue; }

QTreeView::branch:closed:has-children:has-siblings { background: pink; }

QTreeView::branch:has-children:!has-siblings:closed { background: gray; }

QTreeView::branch:open:has-children:has-siblings { background: magenta; }

QTreeView::branch:open:has-children:!has-siblings { background: green; }
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

尽管它比较丰富多彩,但可以用下面的图片实现一个更有用的效果:

图片 路径
这里写图片描述 vline.png
这里写图片描述 branch-more.png
这里写图片描述 branch-end.png
这里写图片描述 branch-closed.png
这里写图片描述 branch-open.png


QTreeView::branch:has-siblings:!adjoins-item { border-image: url(vline.png) 0; }

QTreeView::branch:has-siblings:adjoins-item { border-image: url(branch-more.png) 0; }

QTreeView::branch:!has-children:!has-siblings:adjoins-item { border-image: url(branch-end.png) 0; }

QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings { border-image: none; image: url(branch-closed.png); }

QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings  { border-image: none; image: url(branch-open.png); }
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

由此产生的 Tree 视图看起来像这样:

这里写图片描述

指示器

这里写图片描述

如果我们对 Tree 需要添加指示器,需要用过 ::indicator 辅助控制:

QTreeView { border: 1px solid rgb(50, 50, 50); background-color: rgb(57, 58, 60); font-size: 16px; }
QTreeView::item { /** item **/ height: 25px; color: white; border: none; border-bottom: 1px solid rgb(50, 50, 50); background-color: transparent; }
QTreeView::item:hover { /** 鼠标滑过 item **/ background-color: rgba(255, 255, 255, 40); }
QTreeView::item:selected { /** 鼠标选中 item **/ background-color: rgb(0, 160, 230); }
QTreeView::branch:open:has-children { /** 分支 - 展开 item(有孩子) **/ image: url(:/Images/arrowBottom); }
QTreeView::branch:closed:has-children { /** 分支 - 折叠 item(无孩子) **/ image: url(:/Images/arrowRight); }
QTreeView::indicator { /** 指示器 **/ width: 20px; height: 20px; }
QTreeView::indicator:enabled:unchecked { /** 指示器 - 未选中 **/ image: url(:/Images/checkBox); }
QTreeView::indicator:enabled:unchecked:hover { image: url(:/Images/checkBoxHover); }
QTreeView::indicator:enabled:unchecked:pressed { image: url(:/Images/checkBoxPressed); }
QTreeView::indicator:enabled:checked { /** 指示器 - 选中 **/ image: url(:/Images/checkBoxChecked); }
QTreeView::indicator:enabled:checked:hover { image: url(:/Images/checkBoxCheckedHover); }
QTreeView::indicator:enabled:checked:pressed { image: url(:/Images/checkBoxCheckedPressed); }
QTableView::indicator:enabled:indeterminate { /** 指示器 - 半选 **/ image: url(:/Images/checkBoxIndeterminate); }
QTreeView::indicator:enabled:indeterminate:hover { image: url(:/Images/checkBoxIndeterminateHover); }
QTreeView::indicator:enabled:indeterminate:pressed { image: url(:/Images/checkBoxIndeterminatePressed); }
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

整行拓展

由上面分析,如果要整行拓展,可以将 item 和 branch 相同状态(正常、划过、选中)下的背景设置相同。

QTreeView { border: 1px solid rgb(50, 50, 50); background-color: rgb(57, 58, 60); }
QTreeView::item { height: 25px; color: white; border: none; background-color: transparent; }
QTreeView::item:hover, QTreeView::branch:hover { /** 鼠标滑过 **/ background-color: rgba(255, 255, 255, 40); }
QTreeView::item:selected, QTreeView::branch:selected { /** 鼠标选中 **/ background-color: rgb(0, 160, 230); }
QTreeView::branch { background-color: transparent; }
QTreeView::branch:open:has-children { image: url(:/Images/arrowBottom); }
QTreeView::branch:closed:has-children { image: url(:/Images/arrowRight); }
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

O__O”…,看似大功告成,可万万没想到:

这里写图片描述

当鼠标选中的时候可以整行拓展,可是当鼠标滑过。。。无语中!

没关系,其实 Qt 关于盒模型的介绍说的很清楚,不妨添加如下代码试试:

QTreeView { show-decoration-selected: 1; }
 
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

注意:在之前代码的基础上,只需再添加这一行即可。

再来看一下效果:

这里写图片描述

show-decoration-selected 属性控制选中时是选中整项还是仅仅只是项的文本,而辅助控制(子组件) ::branch 和 ::item 用于精细化控制。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132302.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 查看Linux内核版本的命令_查看redhat版本命令

    查看Linux内核版本的命令_查看redhat版本命令有朋友在使用Linux的过程中要查看Linux的内核版本号,这要怎么看呢?也有朋友文要怎么查看linux系统版本信息呢?下面和小编一起了解一下吧。一、查看linux内核版本号1:登录linux,在终端输入cat/proc/version2:登录linux,在终端输入uname-a即列出linux的内核版本号。二、查看linux系统版本信息1:登录到linux服务器执行lsb_rele…

    2022年10月13日
    0
  • 网站敏感词过滤的实现(附敏感词库)「建议收藏」

    网站敏感词过滤的实现(附敏感词库)「建议收藏」现在基本上所有的网站都需要设置敏感词过滤,似乎已经成了一个网站的标配,如果你的网站没有,或者你没有做相应的处理,那么小心相关部门请你喝茶哦。最近在调研Javaweb网站的敏感词过滤的实现,网上找了相关资料,经过我的验证,把我的调研结果写出来,供大家参考。一、敏感词过滤工具类把敏感词词库内容加载到ArrayList集合中,通过双层循环,查找与敏感词列表相匹配的字符串,如果找到以*号替换…

    2022年6月12日
    52
  • Jsonpath语法

    Jsonpath语法JsonPath用法示例操作符符号描述$查询的根节点对象,用于表示一个json数据,可以是数组或对象@过滤器(filterpredicate)处理的当前节点对象*获取所有节点.获取子节点…递归搜索,筛选所有符合条件的节点?()过滤器表达式,筛选操作[start:end]数组片段,区间为[start,end),不包含en…

    2025年7月25日
    0
  • Myeclipse2017SVN插件安装[通俗易懂]

    Myeclipse2017SVN插件安装[通俗易懂]Myeclipse2017SVN插件安装链接已改为本人资源链接,自取.如果对你有帮助请给评论一下点个赞,十分感谢!

    2022年7月21日
    10
  • 关于我妈的一切_networkmanager是什么服务

    关于我妈的一切_networkmanager是什么服务NetworkManager(NetworManager)是检测网络、自动连接网络的程序。无论是无线还是有线连接,它都可以令您轻松管理。对于无线网络,网络管理器可以自动切换到最可靠的无线网络。利用网络管理器的程序可以自由切换在线和离线模式。网络管理器可以优先选择有线网络,支持VPN。网络管理器最初由Redhat公司开发,现在由GNOME管理。1.查看NetworkManager…

    2022年10月4日
    0
  • 7、注解@Mapper、@MapperScan

    7、注解@Mapper、@MapperScan1、@Mapper注解:作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类添加位置:接口类上面@MapperpublicinterfaceUserDAO{//代码}如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan2、@MapperScan作用:指定要变成实现类的接口所在的…

    2022年5月1日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号