在一般的QTable表格中会有网格线,如下图:
如何才能移除网格线,若要移除全部网格线,只需一句代码:
view->setShowGrid(false);
若要移除单个水平或者垂直网格线,则需要借助QStyledItemDelegate,一下通过继承QStyledItemDelegate来实现移除垂直或水平的网格线:
class QLineDelegate : public QStyledItemDelegate
{
public:
QLineDelegate(QTableView* tableView)
{
int gridHint = tableView->style()->styleHint(QStyle::SH_Table_GridLineColor, new QStyleOptionViewItemV4());
QColor gridColor = static_cast<QRgb>(gridHint);
pen = QPen(gridColor, 0, tableView->gridStyle());
view = tableView;
}
protected:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
QStyledItemDelegate::paint(painter, option, index);
QPen oldPen = painter->pen();
painter->setPen(pen);
//painter->drawLine(option.rect.topRight(), option.rect.bottomRight());//显示垂直网格线
painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());//显示水平网格线
painter->setPen(oldPen);
}
private:
QPen pen;
QTableView* view;
};
设置view不显示网格线,设置item委托
view->setShowGrid(false);
view->setItemDelegate(new QLineDelegate(view));
效果:
但是最边上的边框线也没有了,知道如何处理的在下面留言!