Qt之QSS(QTreeView)

简介: 简述QTreeView 作为一个树形控件,我们经常用到,只要对样式熟悉,可以做出特别漂亮的特效。简述自定义 QTreeView指示器整行拓展自定义 QTreeView交替行的背景色可以使用下面样式代码来定义:QTreeView { alternate-background-color: yellow;}当鼠标划过

简述

QTreeView 作为一个树形控件,我们经常用到,只要对样式熟悉,可以做出特别漂亮的特效。

自定义 QTreeView

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

QTreeView {
    alternate-background-color: yellow;
}

当鼠标划过 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);
}

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;
}

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

图片 路径
这里写图片描述 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);
}

由此产生的 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);
}

整行拓展

由上面分析,如果要整行拓展,可以将 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);
}

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

这里写图片描述

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

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

QTreeView {
    show-decoration-selected: 1;
}

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

再来看一下效果:

这里写图片描述

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

目录
相关文章
|
6月前
|
数据库 开发者 Windows
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-2
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
6月前
|
XML 设计模式 JSON
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-1
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
前端开发 C++
Qt界面美化之自定义qss样式表
Qt界面美化之自定义qss样式表
|
UED
Qt之QSS(动态属性)
简述 QSS可以定制应用程序的外观,无需关注Qt样式背后的魔力。从非常轻微到极其复杂的调整,样式表都可以做到。对于一个完全定制和独特的用户体验,QtQuick和QGraphicsView是更好的选择。 简述 自定义属性 限制 示例 效果 源码 QSS 更多参考 自定义属性 为了用户界面外观的动态变化,属性选择器可以与动态属性组合使用。动态属性
2976 0
|
计算机视觉
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
详解Qt5.12.9属性表控件:QtPropertyBrowser的使用示例/折叠/展开/小数位数/QSS样式/标题修改/选中行号等(1)
详解Qt5.12.9属性表控件:QtPropertyBrowser的使用示例/折叠/展开/小数位数/QSS样式/标题修改/选中行号等
1436 0
详解Qt5.12.9属性表控件:QtPropertyBrowser的使用示例/折叠/展开/小数位数/QSS样式/标题修改/选中行号等(1)
Qt之QSS(暗橙色)
简述 我觉得一个好看的 UI 可以潜意识地激励我们,不仅可以让我们工作的更高效、更有乐趣,而且可以让应用程序变得更漂亮、更直观。 我比较喜欢风格一致的产品,让所有的东西看起来像是一个大家庭,给人一种专业的视觉享受。当做出很专业的产品时,你甚至可以很自豪地称自己为一个艺术家。 简述 故事情节 QSS 样式 更多参考 版权所有:一去丶二三里,转载请注明出处
2104 0
Qt之QSS(黑色炫酷)
简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples。 黑色炫酷 - 一款漂亮的QSS风格。 之前博客中分享了很多关于Qt的样式效果,几乎都是基下面此样式。 你可以直接使用,也可以随意转载,但请务必保留版权声明和许可声明,请参考“声明”部分。 简述 声明 效果 QSS 更多参考 声
3558 0
Qt之QSS(白色靓丽)
简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples。 白色靓丽 - 一款漂亮的QSS风格。 你可以直接使用,也可以随意转载,但请务必保留版权声明和许可声明,请参考“声明”部分。 简述 声明 效果 QSS 更多参考 声明 被授权人权利 被授权人有权利使用、复制、修改、合并、出版
2710 0

推荐镜像

更多