QTreeWidget 设置任意行背景色

这篇具有很好参考价值的文章主要介绍了QTreeWidget 设置任意行背景色。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

设置任意某行,网上这类示例少,一般都是选中行、交替行、高亮行等设置。

比如我要将顶层节点的背景色修改一下。

方法1,先继承QTreeWidget,更改它的 drawBranches函数,在里面添加条件判断,然后根据需要设置颜色。

#ifndef TREEWIDGET_H
#define TREEWIDGET_H
#include <QTreeWidget>
#include <QObject>
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 <QPainter>
#include <QtDebug>
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);

如图。

QTreeWidget 设置任意行背景色

缺点是在添加行的时后,需要手动再设置一次颜色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更省劲。

QTreeWidget 设置任意行背景色

条件是根据需要来修改的,加工一下,可以设置任意行的颜色。

设置top level任意行颜色:

#ifndef TREEWIDGET_H
#define TREEWIDGET_H
#include <QTreeWidget>
#include <QObject>
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 <QPainter>
#include <QtDebug>
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);

QTreeWidget 设置任意行背景色

其他条件根据自己的需求修改。

原创求赞文章来源地址https://www.toymoban.com/news/detail-405990.html

到了这里,关于QTreeWidget 设置任意行背景色的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 十个高质量工具网站推荐,AI自动抠图换背景,任意背景自动融合

    AI 背景更换是一种利用生成式人工智能创建新图像背景的软件工具。与传统方法需要移除原有的背景并更换新的不同,AI背景生成器使用先进的算法生成与前景完美融合的全新背景。这项技术彻底改变了图像编辑的方式,为设计提供了更多的创造自由和灵活性。 AI背景生成器

    2024年02月02日
    浏览(62)
  • 【CSS】CSS 背景设置 ② ( 背景位置 | 背景位置-方位值设置 )

    如果 盒子的大小 大于 背景图片的大小 , 默认的 图片 位置是 左上角 ; 设置背景位置的 CSS 语法如下 : background-position 属性值 可以是 length 长度 , 也可以是 position 方位 ; length 长度 : 百分数 : 如 50% ; 浮点数 + 单位 : 如 : 150.5px ; position 方位 : 设置的是 x 坐标的方位 和 y 坐标的方

    2024年02月07日
    浏览(43)
  • 【CSS】CSS 背景设置 ⑨ ( 背景半透明设置 )

    背景半透明设置 可以 使用 rgba 颜色值设置半透明背景 ; 下面的 CSS 样式中 , 就是 设置黑色背景 , 透明度为 20% ; 颜色的透明度 alpha 取值范围是 0 ~ 1 之间 , 在使用时 , 可以 省略 0.x 前面的 0 , 直接使用 .x 作为透明度值 , 如 : 背景半透明 指的是 盒子的背景设置为半透明 , 可以看

    2024年02月01日
    浏览(46)
  • vue设置页面背景及背景图片

    本地静态图片  cdn图片 设置背景色 实战-PC web登录页 实战-小程序登录页

    2024年02月12日
    浏览(58)
  • 【最全IDEA个性化教程】idea设置主题+恢复主题默认设置+设置选中代码颜色+关键字颜色+设置字体大小、样式、颜色+设置背景颜色、图片+设置导航栏背景颜色+设置控制台字体样式及背景+常用快捷键)

    主题亮暗设置 如果在系统自带的主题上进行了一些字体的个性化后想恢复默认设置,直接在更换主题处-点击小齿轮-选择Restore Defaults 进阶:下载主题使用 下载该主题的地址 idea更换主题,配置字体的教程参考 主题下好以后后缀为.jar 导入一下下好的主题,然后OK-OK-OK后IDEA会

    2024年02月03日
    浏览(107)
  • centos7 添加网卡设置动态ip,修改网卡为任意名称

    本文记录如何在centos环境上增加两个网卡,并设置为动态获取ip,以及修改网卡名称为任意名称 1.1 vmvare上添加网络适配器 1、关闭虚拟机 2、 添加网络适配器 3、 选择网络模式 博主的三个网卡全都选择了NAT模式 4、 点击确定 1.2 修改网卡配置文件 1、使用命令检查一下网卡是

    2024年02月03日
    浏览(48)
  • CSS 设置渐变背景 CSS 设置渐变边框

    一、css渐变背景添加透明度opacity css渐变背景经常会在项目开发中遇到,此时UI如果给出的是单一的渐变背景(没有背景透明度),这个我们会很快的写出代码,如下: 但偶尔的时候UI会给煎饼的背景色添加一个透明度,但是使用 opacity属性会导致文本也会有透明度 ,接下来给

    2024年02月09日
    浏览(45)
  • 用Python给PDF文档设置背景色或背景图

    PDF作为一种跨平台、高保真的文件格式被广泛应用,尤其在报告、手册、电子书、合同等场景中,其重要性不言而喻。然而,在满足基本内容展示需求的同时,为了增强视觉效果,提升阅读体验,或者出于品牌标识、企业形象的一致性考虑,我们有时需要对PDF文档进行更深度

    2024年04月15日
    浏览(24)
  • Qt 设置窗口背景

    窗口背景无非两种:背景色、背景图片。Qt中窗口背景如何设置? 一、QPalette设置背景 二、实现paintEvent,使用QPainter来绘制背景 三、使用QSS来设置背景  关于QSS的使用不想多说,一般我不用QSS设置窗口背景,也不建议使用。(注意:这里是对于窗口而言)。如果是子部件当然

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包