在 QTableWidget 的 headers 列下添加边框

Add border under column headers in QTableWidget

我有一个 table 小部件,在对话框中有两列 header,如下所示:

名为“索引”和“标签”的列 header 之间存在分隔,但这些 header 与其下方的行之间没有分隔线。这个怎么加?

假设 table 实例化为:

table = QTableWidget(6, 2, self)

我知道我可以通过 headerItem = table.horizontalHeaderItem(0) 修改一些属性并将其重新设置来获得第一个水平 header 作为 QTableWidgetItem,但我不确定要设置什么属性或者是否有是一种更直接的方法。

编辑:

如果我提取 header 并通过以下方式设置其底层框架的样式、阴影和线宽属性:

header = table.horizontalHeader()
header.setFrameStyle(QFrame.Box | QFrame.Plain)
header.setLineWidth(1)
table.setHorizontalHeader(header)

我最终得到的结果是这样的:

这样一来,header 周围就会出现边框。这可以分别针对每个 header 项目完成,但有几个问题:

  1. 边框超出下方单元格的宽度
  2. 我仍然需要将框架的颜色与现有的线条相匹配,这样看起来还不错。
  3. 分隔“索引”和“标签”的垂直线似乎相对于分隔下方单元格的线移动了(除非我的眼睛在欺骗我)。

还有其他'built in'方法吗?

我遇到了同样的问题。首先要注意的是,这只发生在 Windows 10 上。在其他 OS 上,没有什么可修复的,它可以正常工作。然而,在 Windows 10 上,绘画图元并未绘制底部边框(这是默认的 Windows 10 table header 样式 - 如 windows 文件管理器)。这很不幸,但可以通过以下样式 sheet 解决:

if(QSysInfo::windowsVersion()==QSysInfo::WV_WINDOWS10){
    setStyleSheet(
        "QHeaderView::section{"
            "border-top:0px solid #D8D8D8;"
            "border-left:0px solid #D8D8D8;"
            "border-right:1px solid #D8D8D8;"
            "border-bottom: 1px solid #D8D8D8;"
            "background-color:white;"
            "padding:4px;"
        "}"
        "QTableCornerButton::section{"
            "border-top:0px solid #D8D8D8;"
            "border-left:0px solid #D8D8D8;"
            "border-right:1px solid #D8D8D8;"
            "border-bottom: 1px solid #D8D8D8;"
            "background-color:white;"
        "}");}

很抱歉用 C++ 代码打扰您,但转换成有效的 pyqt 代码应该很容易。

注意 1:background-color 和填充是不幸的,但它们是使我们的自定义渲染看起来像默认渲染所必需的。

注2:边框的颜色是我系统中网格的颜色。我没有使用默认的颜色 header.

注意3:QTableCornerButton::section部分是添加左上角下方缺失边框所必需的。如果垂直 header 不可见,则缺失的线也不可见。

希望对您有所帮助。

试试这个:

header.setStyleSheet( "QHeaderView::section { border-bottom: 1px solid gray; }" );

对你的代码稍作调整对我有用:

 horizontalHeader().setStyleSheet( "QHeaderView::section { border-bottom: 1px solid gray; }" )