2016-07-24 220 views
1

我有一个对话框,有两个列标题的表格控件,看起来像这样:下列标题添加边框QTableWidget的

enter image description here

有一个名为“索引”和列标题之间的分离“标签“,但这些标题和它们下面的行之间没有分隔边界。如何添加?

说作为表被实例化:

table = QTableWidget(6, 2, self) 

我知道我可以做headerItem = table.horizontalHeaderItem(0)修改某些属性和设置回拿到第一水平头为QTableWidgetItem,但我不能确定是什么性质的设置或者是否有更直接的方法。

编辑:

如果我提取头和设置样式,阴影和线通过宽其底层帧的属性:

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

我最终的东西看起来像这样:

enter image description here

这样一个边界确实表明了周围的头。这可以为每个标题项目进行独立,但也有一对夫妇的忧虑:

  1. 边界延伸过的细胞的下方
  2. 我仍然有框的颜色相匹配的宽度现有的线看起来有点体面。
  3. 看起来,分隔“索引”和“标签”的垂直线相对于分隔下面单元格的线条移动(除非我的眼睛正在玩弄技巧)。

有没有更多'内置'的方式来做到这一点?

+0

'QTableWidget的:: horizo​​ntalHeader()'返回一个指针相关'QHeaderItem'这(几级向下)继承'QFrame'。设置框架样式/形状/宽度是否有影响? –

+0

您建议您在整个标题周围创建一个边框,并可以单独用于每个标题项目,但有一些问题。请参阅编辑 – pbreach

回答

1

我有同样的问题。首先要注意的是,这只发生在Windows 10上。在其他操作系统上,没有什么可修复的,它只是起作用。然而,在Windows 10上,绘制原语不是绘制底部边框(这是默认的Windows 10表头风格 - 可以在Windows文件资源管理器中看到)。这是不幸的,但可以用下面的样式表来解决:

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:背景颜色和填充是不幸的,但它们是使我们的自定义渲染看起来像默认渲染所必需的。

注2:边框的颜色是我系统上网格的颜色。我没有使用默认标题的颜色。

注3:需要QTableCornerButton::section零件才能在左上角下方添加缺少的边框。如果垂直标题不可见,则缺失的行也是不可见的。

希望这会有所帮助。

0

试试这个:

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