QTreeWidget显示类似QTableWidget网格的实现

QTreeWidget显示类似QTableWidget网格的实现

先上图看看效果

在这里插入图片描述

方案一:QSS

ui->treeWidget->setStyleSheet("QTreeView::item {\
        padding - left:5px;\
        min - height: 25px;\
        border:1px solid lightgray;\
        border - left:transparent;\
        border - top:transparent;}\
        QTreeView::item:selected:active{\
        background: rgb(93,180,226);\
        color:white;} ");

此方案会导致item->setBackground函数失效,可能是默认了单元格颜色为透明,具体原因博主并未深究,有知道原因的小伙伴也可以留言告诉我

如果需要使用setBackGround函数的小伙伴,可以使用下面一种方法。

方案二:paintEvent

创建从QTreeWidget继承的子类TreeWidgetBase,将UI中的QTreeWidget提升为TreeWidgetBase

void TreeWidgetBase::paintEvent(QPaintEvent* event)
{
    QPainter painter(viewport());
    painter.setPen(QPen(QColor(192, 192, 192), 1));

    QTreeWidgetItemIterator it(this);
    while (*it)
    {
        if ((*it)) {
            QRect rtItem = visualItemRect(*it);
            if(*it == this->topLevelItem(0)){
                painter.drawLine(rtItem.topLeft(), rtItem.topRight());
            }
            painter.drawLine(rtItem.topRight(), rtItem.bottomRight());
            painter.drawLine(rtItem.bottomLeft(), rtItem.bottomRight());
            painter.drawLine(rtItem.topLeft(), rtItem.bottomLeft());

            QPoint ptStart(rtItem.right(),rtItem.top());
            QPoint ptEnd(rtItem.right(),rtItem.bottom());
            for(int i = columnCount()-1; i>0;i--){
                int colWidth =  this->columnWidth(i);
                ptStart += QPoint(0- colWidth, 0);
                ptEnd += QPoint(0 - colWidth, 0);
                painter.drawLine(ptStart, ptEnd);
            }
        }
        ++it;
    }
    QTreeWidget::paintEvent(event);
}
`
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以通过设置QTableWidget的属性来显示网格线,具体方法如下: 1. 设置QTableWidget网格线颜色和宽度: ```python tableWidget.setGridColor(QColor(0, 0, 0)) # 设置网格线颜色为黑色 tableWidget.setLineWidth(1) # 设置网格线宽度为1像素 ``` 2. 设置QTableWidget的单元格边框: ```python tableWidget.setStyleSheet("QTableView::item {border: 1px solid gray;}") # 设置单元格边框为灰色实线 ``` 这样就可以在QTableWidget显示网格线了。 ### 回答2: QTableWidget是Qt中提供的一种表格控件,用来显示数据,有时候在使用QTableWidget时,可能会遇到表格控件不显示网格线的情况。这种情况的出现可能是由于控件的属性设置或者代码逻辑的问题。 以下是几种常见原因和解决方法: 1. 控件属性设置问题 首先,我们需要检查控件的属性设置,确保网格线的显示属性被正确设置了。在QTableWidget属性编辑器或者代码中,可以检查以下属性: • gridStyle: 网格线的风格,通常为Qt::SolidLine或Qt::DashLine等。 • horizontalHeaderVisible: 水平表头是否可见。 • verticalHeaderVisible: 垂直表头是否可见。 • showGrid: 是否显示网格线。 例如,若showGrid属性被设置为false,那么QTableWidget就不会显示网格线,可以将该属性设置为true即可。 2. 代码逻辑问题 另外,我们也需要考虑代码逻辑的问题。有时,在设置表格数据时,可能会涉及到对单元格的样式设置,而这也有可能导致网格线的显示问题。例如,如果我们在代码中对单元格的边框颜色进行了修改,而忘记重新设置网格线的边框颜色,那么就可能会导致网格线不能正确显示的问题。在这种情况下,我们需要注意代码逻辑,确保所有与网格线有关的样式都被正确设置。 3. 控件样式表问题 最后,我们还需要关注可能存在的控件样式表问题。有时,我们可能会在样式表中设置了一些样式,这些样式可能与网格线的显示有冲突,从而导致网格线不能正确显示。在这种情况下,我们需要仔细检查样式表中的设置,找出可能引起问题的部分,尽可能保持样式表的简洁性。 总的来说,如果QTableWidget显示网格线,我们需要仔细检查以上几个方面,找出问题所在,尽可能从控件属性设置、代码逻辑和控件样式表三个方面入手,解决问题。 ### 回答3: QTableWidget是Qt中比较常用的控件之一,用于显示表格数据,同时也支持编辑、排序、复制等功能。在使用QTableWidget时,我们可能会遇到网格线不显示的问题,下面我将从以下几个方面解决该问题。 1. 设置网格线颜色和线宽 通过代码设置QTableWidget网格线颜色和线宽,可以使其显示出来。我们可以使用如下代码: ```python self.tableWidget.setGridStyle(QtCore.Qt.SolidLine) # 设置网格线的线形为实线 self.tableWidget.setLineWidth(1) # 设置网格线的线宽 self.tableWidget.setShowGrid(True) # 显示网格线 self.tableWidget.setStyleSheet("QTableView::item{border:1px solid gray;}") # 设置单元格边框颜色 ``` 上述代码中,setGridStyle()方法设置了网格线的线形为实线,setLineWidth()方法设置了线宽为1,setShowGrid()方法设置了显示网格线,setStyleSheet()方法设置了单元格边框的颜色为灰色实线边框。 2. 设置QTableView的父级样式表 我们可以通过设置QTableView的父级样式表来控制网格线的显示,具体代码如下: ```python self.tableWidget.setStyleSheet("QTableView::item {border: none;} \ QTableView::item:selected {background-color: rgb(200, 200, 200);} \ QTableView {border: 1px solid grey; \ gridline-color: grey; \ border-radius: 2px; \ font-size: 12px; \ font-family: Microsoft YaHei, Arial; \ background-color: white;}") # 设置表格样式 ``` 该代码中,我们设置QTableView的样式表,其中通过gridline-color属性来控制网格线的颜色,设置颜色为灰色,从而使网格线显示出来。 3. 检查单元格背景色 有时候,QTableWidget中某些单元格的背景色可能会与网格线的颜色一样,这样就会导致网格线看起来没有显示出来。因此,我们需要检查单元格的背景色是否与网格线的颜色相同,如果是,则需要将其背景色设置为其他颜色。 最后,通过以上几点,我们可以解决QTableWidget显示网格线的问题。需要注意的是,以上代码只适用于Python+Qt环境,其他编程语言的解决方法可能会略有不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值