删除QTableView的垂直网格线

时间:2016-05-25 06:15:34

标签: css qt qtableview

我有一个QTableView,如下所示:

enter image description here

我想删除表格中的所有垂直线条。我尝试将gridline-color属性设置为等同于background-color,但它删除了所有网格线。

我希望保持水平网格线,并删除垂直网格线。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:4)

delegate.h

class QLineDelegate : public QStyledItemDelegate
{
    public:
    QLineDelegate(QTableView* tableView);

    protected:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;

    private:
    QPen pen;
    QTableView* view;
};

delegate.cpp

QLineDelegate::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;
}

void QLineDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option,const QModelIndex& index)const
{
    QStyledItemDelegate::paint(painter, option, index);
    QPen oldPen = painter->pen();
    painter->setPen(pen);

    //draw verticalLine
    //painter->drawLine(option.rect.topRight(), option.rect.bottomRight());

    //draw horizontalLine
    //painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());
    //above code, line have breakpoint, the following code can solve it well 

    QPoint p1 = QPoint(itemOption.rect.bottomLeft().x()-1,itemOption.rect.bottomLeft().y());
    QPoint p2 = QPoint(itemOption.rect.bottomRight().x()+1,itemOption.rect.bottomRight().y());
    painter->drawLine(p1, p2);
    painter->setPen(oldPen);
}

tableview.cpp

tableView->setShowGrid(false);
tableView->setItemDelegate(new QLineDelegate(tableView));

答案 1 :(得分:2)

你不能。 QTableView没有选项可以做到这一点。

但是,您可以执行以下操作:将gridline-color属性设置为background-color(就像您一样),然后为QTableView的所有项设置边框};如您只想要水平网格线,它将如下所示:

QTableView::item{
    border-top : 1px solid black
    border-bottom : 1px solid black
}

答案 2 :(得分:0)

将setStyleSheet()与QTableView一起使用,将 border-right-color border-left-color 用于为gridline-color提供的颜色。< / p>