QT QTbaleView移除网线

来源:互联网 发布:藏族演出服淘宝网 编辑:程序博客网 时间:2024/06/11 20:32

在一般的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));

效果:
这里写图片描述
这里写图片描述

但是最边上的边框线也没有了,知道如何处理的在下面留言!

原创粉丝点击