如何从 QHeaderView 中删除水平边框

How to remove horizontal borders from QHeaderView

我有 QTableView object 水平 headerView,(我隐藏了垂直)。 我设置 setShowGrid(false) 以从 qtableView 中删除网格,但是如何删除 QTableView 与其水平 header 之间的分隔符边框。 我试过了:

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

但没有成功。 谢谢

如果你的意思和我一样"border",它就是当前风格的一部分。所以,如果你想摆脱它,你必须使用 style sheets.

这是一个例子:

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

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

此样式 sheet 将页眉部分的总边框设置为 1 像素宽的黑线并隐藏底部边框。

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

好的,我重新实现了 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());
}