NEKO! 2022-12-11 22:36 采纳率: 66.7%
浏览 34
已结题

Qt QTableWidget 垂直标题栏没有添加行的地方背景色为什么是白色的,怎么设置啊?

自己用PySide写Qt页面遇到了点问题
我自定义了QTableWidget的样式表,水平和垂直表头的背景色都设置了,但是在没有添加行和列的时候他们的背景色还是白色的
我在网上找了半天没找到如何设置那部分的颜色
水平表头设置了宽度自适应所以没问题,但是这个垂直表头如果也设置自适应的话会导致每行高度都巨高
具体请看下面的样式表和图
有没有big佬帮帮我啊

class TableWidget(QTableWidget):
    style: str = '''
    QTableWidget {{
        outline: none;
        border: none;
        border-radius: {_radius}px;
        gridline-color: {_border_color};
        padding: 5px;
        font: {_font_size}pt {_font_family};
    }}
    QTableWidget:enabled {{
        border-color: {_border_color};
        color: {_color};
        background-color: {_background_color};
    }}
    QTableWidget:disabled {{
        border-color: {_border_color_disabled};
        color: {_color_disabled};
        background-color: {_background_color_disabled};
    }}
    QTableWidget::item {{
        border: none;
        margin: 0px;
        padding: 1px 5px 1px 5px;
    }}
    QTableWidget::item:hover {{
        background-color: {_background_color_hover};
        border: 1px solid {_border_color_hover};
    }}
    QTableWidget::item:selected {{
        color: {_color_selected};
        background-color: {_background_color_selection};
    }}
    QTableWidget::item::selected:active {{
        background-color: {_background_color_active};
    }}

    QHeaderView::section {{
        background-color: {_background_color};
        border: none;
        border-bottom: 1px solid {_border_color};
        border-right: 1px solid {_border_color};
        min-width: 20px;
    }}
    QHeaderView::section:horizontal {{
        border: none;
        border-bottom: 1px solid {_border_color};
        border-right: 1px solid {_border_color};
        background-color: {_header_horizontal_color};
        padding-top: 3px;
        padding-bottom: 3px;
    }}
    QHeaderView::section:vertical {{
        color: {_color_active};
        font: {_font_size}pt {_font_family};
        border: none;
        border-bottom: 1px solid {_border_color};
        background-color: {_header_vertical_color};
        padding-left: 5px;
        padding-right: 5px;
    }}
    QTableWidget QTableCornerButton::section {{
        border: none;
        border-bottom: 1px solid {_border_color};
        background-color: {_header_horizontal_color};
        padding: 3px;
        border-top-left-radius: {_radius}px;
    }}
'''

img

  • 写回答

2条回答 默认 最新

  • NEKO! 2022-12-12 11:22
    关注

    问题已经解决,我把所有的样式表都删除然后一个个添加后测试样式变化,发现 QTableWidget 的样式表只能表示表格区域,他是不包含横纵标题栏的。同样的,使用 QHeaderView::section:horizontal 以及 QHeaderView::section:vertical 设置的标题栏样式也不包含超出表格范围的部分。

    只设置 QTableWidget 背景色:

    img

    再设置 QHeaderView::section:horizontal 以及 QHeaderView::section:vertical 背景色:

    img

    可见剩下的白色区域并不归我所设置的这些样式表管!于是我放弃了复杂的样式表,只写了一行 background-color: #444444 发现这样是可以设置全部区域的背景色的,所以问题肯定是我的自定义样式表缺一部分,那么究竟是哪一部分呢??最后还得回到面向对象编程的本质上来,QTableWidget 是官方提供的对 QTableView 封装后的一个组件,那么白色区域会不会属于它当中包含的子组件?答案是肯定的,和我们自己自定义小组件的做法一样,QTableWidget 也是将子组件放到了一个 QWidget 中,我在样式表中加入对 QWidget 背景色的设置,不出所料白色区域消失。

    img

    最后把列宽自适应 self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) 加上,终于得到了我想要的效果。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月11日

悬赏问题

  • ¥15 关于c++外部库文件宏的问题,求解
  • ¥15 office打开卡退(新电脑重装office系统后)
  • ¥300 FLUENT 火箭发动机燃烧EDC仿真
  • ¥15 【Hadoop 问题】Hadoop编译所遇问题hadoop-common: make failed with error code 2
  • ¥15 vb6.0+webbrowser无法加载某个网页求解
  • ¥15 RPA财务机器人采购付款流程
  • ¥15 计算机图形多边形及三次样条曲线绘制
  • ¥15 根据protues画的图用keil写程序
  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误