如何从QHeaderView中删除水平边框

时间:2016-03-22 07:32:19

标签: qt qtableview qheaderview qframe qabstractitemview

我有QTableView对象,水平headerView,(垂直我隐藏)。 我设置setShowGrid(false)来从qtableView中删除网格,但是如何删除QTableView和它的水平标题之间的分隔符边框。 我试过了:

tableView->horizontalHeader()->setFrameShape(QFrame::VLine)

但没有成功。 谢谢

2 个答案:

答案 0 :(得分:3)

如果你的意思相同"边界"和我一样,它是当前风格的一部分。因此,如果您想要摆脱它,您必须使用 样式表 定义自定义样式。

以下是一个例子:

QString style = R"( QHeaderView::section {
                        border: 1px solid black;
                        border-bottom: 0px;             
                    }
                  )";

tableView->horizontalHeader()->setStyleSheet(style);

此样式表将标题部分的整体边框设置为1px宽度的黑色线条,并隐藏底部边框。

注意:我在这里使用 C ++ 11原始字符串文字,所以不要混淆。它只是一个字符串。

答案 1 :(得分:3)

好的,我重新实现了paintSection方法,现在我有了我想要的东西/

void MyHeaderView::paintSection(QPainter *painter, const QRect &rect,  int logicalIndex) const
{
  QString data = model() -> headerData(logicalIndex, orientation(), Qt::DisplayRole).toString();

  QFontMetrics fm = painter -> fontMetrics();

  painter -> fillRect(rect, QBrush(QColor("white")));
  painter -> drawText(rect, Qt::AlignLeft, data);

  painter -> drawLine(rect.topRight(), rect.bottomRight());
}