QTreeWidget 设置任意行背景色
设置任意某行,网上这类示例少,一般都是选中行、交替行、高亮行等设置。
比如我要将顶层节点的背景色修改一下。
方法1,先继承QTreeWidget,更改它的 drawBranches函数,在里面添加条件判断,然后根据需要设置颜色。
#ifndef TREEWIDGET_H
#define TREEWIDGET_H
#include
#include
class TreeWidget : public QTreeWidget
{Q_OBJECT
public:explicit TreeWidget(QWidget *parent = nullptr);
protected:virtual void drawBranches(QPainter *painter,const QRect &rect,const QModelIndex &index) const;
};
#endif // TREEWIDGET_H
#include "treewidget.h"
#include
#include
TreeWidget::TreeWidget(QWidget *parent): QTreeWidget(parent)
{
}
void TreeWidget::drawBranches(QPainter *painter,const QRect &rect,const QModelIndex &index) const
{auto item = this->itemFromIndex(index);if (item->parent() == nullptr) //某种条件{painter->fillRect(rect.x(), rect.y(), rect.width(), rect.height(), QColor(46,146,46));}QTreeView::drawBranches(painter, rect, index);
}
在使用时,在添加顶层行时,设置颜色,注意跟 drawBranches里面的颜色相同。
...
QStringList itemNameList0;
itemNameList0 << QString(tr("Tester"));
QTreeWidgetItem *topLevelItem0 = new QTreeWidgetItem(ui->treeWidget, itemNameList0);
QBrush brushColor(QColor(46, 146, 46));
topLevelItem0->setBackground(0, brushColor);
ui->treeWidget->addTopLevelItem(topLevelItem0);
如图。

缺点是在添加行的时后,需要手动再设置一次颜色item-> setBackground(),否则只有前面的地方显示背景色。
在动态添加窗体条目的情况下,添加时设置一下即可,这时缺点可以忽略。
方法2
上面的方法还是有点不太方便,最好只设置一次。做一些修改。
void TreeWidget::drawRow(QPainter *painter,const QStyleOptionViewItem &options,const QModelIndex &index) const
{auto item = this->itemFromIndex(index);if (item->parent() == nullptr){painter->fillRect(options.rect.x(), options.rect.y(), options.rect.width(), options.rect.height(), QColor(46,146,146));}QTreeView::drawRow(painter, options, index);
}
在使用时,不用设置颜色,
...QStringList itemNameList0;itemNameList0 << QString(tr("Tester"));QTreeWidgetItem *topLevelItem0 = new QTreeWidgetItem(ui->treeWidget, itemNameList0);ui→treeWidget→addTopLevelItem(topLevelItem0);
如图,这比方法1更省劲。

条件是根据需要来修改的,加工一下,可以设置任意行的颜色。
设置top level任意行颜色:
#ifndef TREEWIDGET_H
#define TREEWIDGET_H
#include
#include
class TreeWidget : public QTreeWidget
{Q_OBJECT
public:explicit TreeWidget(QWidget *parent = nullptr);void SetLineBKColor(int row, QColor color);
protected:virtual void drawRow(QPainter *painter,const QStyleOptionViewItem &options,const QModelIndex &index) const;
private:QColor m_pConditionColor;int m_row;
};
#endif // TREEWIDGET_H
#include "treewidget.h"
#include
#include
TreeWidget::TreeWidget(QWidget *parent): QTreeWidget(parent)
{m_row = -1;
}
void TreeWidget::SetLineBKColor(int row, QColor color)
{m_row = row;m_pConditionColor = color;
}
void TreeWidget::drawRow(QPainter *painter,const QStyleOptionViewItem &options,const QModelIndex &index) const
{if (index.row() == m_row){painter->fillRect(options.rect.x(), options.rect.y(), options.rect.width(), options.rect.height(), m_pConditionColor);}QTreeView::drawRow(painter, options, index);
}
使用时...QStringList itemNameList0;itemNameList0 << QString(tr("Tester"));QTreeWidgetItem *topLevelItem0 = new QTreeWidgetItem(ui->treeWidget, itemNameList0);ui→treeWidget→addTopLevelItem(topLevelItem0);ui->treeWidget->SetLineBKColor(1, Qt::lightGray);

其他条件根据自己的需求修改。
原创求赞
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
