【问题标题】:What are the options available within a Qt Stylesheet for a QTableView widget?QTableView 小部件的 Qt 样式表中有哪些可用选项?
【发布时间】:2022-01-15 17:40:26
【问题描述】:

我一直在寻找关于 Qt 小部件样式表的详细文档——特别是 QTableView 小部件。以下是我发现的一些有用(尽管不完整)的资源:

  1. https://doc.qt.io/qt-5/stylesheet-reference.html
  2. QTableView/QTableWidget grid stylesheet - grid line width
  3. How to set stylesheet for the current item in QTableView

我只是想获取 QTableView 样式表选项的详细(完整)列表。这个文档在哪里?我必须从网络上获取一些信息来拼凑一个完整的样式表,这似乎很奇怪。

这是我现在使用的样式表的示例:

QTableView {
    color: black;
    gridline-color: black;
    border-color: rgb(242, 128, 133);
    font: 10px;
}
QHeaderView::section {
    background-color: rgb(71, 153, 176);
    color: white;
    height: 35px;
    font: 14px;
}
QTableView::item:focus{
    border: 2px solid rgb(242, 128, 133);
    background-color: rgb(255, 254, 229);
}
QScrollBar:vertical {
    background: rgb(188, 224, 235);
}
 QScrollBar::handle:vertical {
    background: rgb(71, 153, 176);
 }
QScrollBar:horizontal {
    background: rgb(188, 224, 235);
}
 QScrollBar::handle:horizontal {
    background: rgb(71, 153, 176);
 }

这是我仍然无法使用样式表完成的:

  1. 我想更改分组选择单元格时的颜色。
  2. 这个样式表隐藏了我表上的“行”
  3. 我也想编辑行的样式表。

在这里您可以看到在组中选择时的单元格行为: 我希望蓝色单元格与粉红色轮廓单元格的样式相匹配。

QTableView 小部件有哪些选项?我尝试过 QTableView::rows、QTableView::selection 和许多其他方法,但都没有成功。

【问题讨论】:

  • 确实,对于复杂的小部件,QSS 文档在某种程度上是零碎的(并且某些方面根本没有记录),但是,如果仔细研究,通常就足够了。也就是说,回答您的一些问题: 1. 您的意思是您想要 group 选择的 specific 颜色与 single 选择不同?如果是这种情况,QSS 是不可能的; 2.“隐藏”是什么意思? 3. 你问是否可以为行和列使用不同的样式表?这是不可能的:您如何区分何时将样式表属性用于行或列?
  • 是的,对于组选择,我只希望分组单元格匹配单个选择。正如您在上图中看到的,分组的单元格是蓝色的,但我希望它们都是黄色的,带有粉红色的边框 - 就像单个选择一样。 “隐藏”是指行标题不再存在。他们被编号 - 1、2、3等。他们已经消失了。如果其中任何一个都不可能,那很好,我只想知道。我会觉得奇怪的是,我无法更改简单的组选择颜色。
  • 那么,您希望 all 所选项目与当前项目一样具有“粉红色”边框吗?请注意,“当前索引”和“选定索引”并不总是相同的东西,即使从 UX 角度来看也是如此(这很重要:用户必须能够区分选定索引和当前索引)
  • 好的,谢谢。我将从所选索引中省略粉红色边框,仅将其保留在当前索引上。我已经弄清楚如何通过使用 QTableView 样式表条目下的 selection-background-color 来更改组选定单元格的背景颜色
  • 好,假设你解决了这个问题,你还缺少什么?

标签: css qt pyqt5 qtableview


【解决方案1】:

在处理 QSS(Qt 样式表)时要考虑的一个重要方面是,在复杂小部件上设置 任何 属性时,所有其他基本属性必须 设置。

文档清楚地说明了“常见”小部件(如 QComboBox 或 QScrollBar),但没有说明更多问题小部件的属性,如 QHeaderView(负责显示行或列的 title 部分的小部件)。

最重要的是,严格相关属性,如widthheight(所有小部件支持)必须两者 strong> 设置。

如果您想为样式表中的标题部分设置特定高度,您必须也设置宽度。

QHeaderView::section {
    background-color: rgb(71, 153, 176);
    color: white;
    height: 35px;
    width: 150px; 
    font: 14px;
}

不幸的是,使用 QSS 设置大小有两个缺点:

  • 大小是固定的,基于“像素”大小;
  • 自动禁用文本省略(至少在 QHeaderView 和普通样式中);

这给我们带来了一个重要的方面:样式表必须谨慎使用(而意识到这一点的唯一方法是经验和研究来源)。几乎总是不鼓励在样式表中设置显式大小,尤其是当这些大小处理文本显示时。如果要为标题设置默认尺寸,则应使用setDefaultSectionSize()


最后,即使问题已经被 OP 解决了,为了清楚起见,我会添加以下内容。
项目视图的选择颜色可以通过两种不同的方式设置:

  1. 设置::item 伪选择器颜色:

    QTableView::item:selected {
        background-color: rgb(242, 128, 133);
    }
    

    上面将设置项目的背景并完全覆盖样式绘制行为(取决于样式),包括任何基于调色板的“花式”绘制。简单地说,它可能是一个背景色。

  2. 设置项目视图选择器和selection-background-color 属性:

    QTableView {
        ...
        selection-background-color: rgb(242, 128, 133);
    }
    

    上面将设置表格Highlight调色板角色,然后将恢复为默认样式绘画,提供样式使用的任何“花式”绘画。

注意:样式使用调色板颜色作为参考,有时它们通过使用自定义(通常基于像素图)绘画完全忽略它们。如上所述,selection-background-color 方法仍然很大程度上依赖于样式,这意味着绘画将部分(或完全)被样式覆盖,可能会忽略或更改所选颜色。如果选择颜色比应用程序/系统风格的一致性更重要,您应该使用::item:selected 选择器。

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2014-02-14
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多