更改 QTreeView 的行背景颜色不起作用

2023-11-21

我有一个QTreeView并希望根据行的内容使用不同的背景颜色。为了实现这一目标,我导出了一个class MyTreeView from QTreeView并实现了paint方法如下:

    void MyTreeView::drawRow (QPainter* painter,
                              const QStyleOptionViewItem& option,
                              const QModelIndex& index) const
    {
      QStyleOptionViewItem newOption(option);

      if (someCondition)
      {
        newOption.palette.setColor( QPalette::Base, QColor(255, 0, 0) );
        newOption.palette.setColor( QPalette::AlternateBase, QColor(200, 0, 0) );
      }
      else
      {
        newOption.palette.setColor( QPalette::Base, QColor(0, 0, 255) );
        newOption.palette.setColor( QPalette::AlternateBase, QColor(0, 0, 200) );
      }

      QTreeView::drawRow(painter, newOption, index);
    }

最初,我设置setAlternatingRowColors(true);对于 QTreeView。

我的问题:设置颜色为QPalette::Base 没有效果。每隔一行保持白色。

然而,设置QPalette::AlternateBase 按预期工作。 我试过setAutoFillBackground(true) and setAutoFillBackground(false)没有任何影响。

有任何提示如何解决这个问题吗?谢谢。


Remark:通过适应设置颜色MyModel::data(const QModelIndex&, int role) for Qt::BackgroundRole没有提供所需的结果。在这种情况下,背景颜色仅用于行的一部分。但我想为整行着色,包括带有树导航内容的左侧。

Qt版本: 4.7.3


Update:由于未知原因QPalette::Base似乎是不透明的。 setBrush 不会改变这一点。 我找到了以下解决方法:

    if (someCondition)
    {
        painter->fillRect(option.rect, Qt::red);
        newOption.palette.setBrush( QPalette::AlternateBase, Qt::green);
    }
    else
    {
        painter->fillRect(option.rect, Qt::orange);
        newOption.palette.setBrush( QPalette::AlternateBase, Qt:blue);
    }

如果唯一的问题是展开/折叠控件没有像行的其余部分那样的背景,那么使用Qt::BackgroundRole in ::data()你的模型(如所描述的pnezis in 他们的答案)并将其添加到您的树视图类中:

void MyTreeView::drawBranches(QPainter* painter,
                              const QRect& rect,
                              const QModelIndex& index) const
{
  if (some condition depending on index)
    painter->fillRect(rect, Qt::red);
  else
    painter->fillRect(rect, Qt::green);

  QTreeView::drawBranches(painter, rect, index);
}

我已经使用 Qt 4.8.0 在 Windows(Vista 和 7)上对此进行了测试,并且展开/折叠箭头具有正确的背景。问题在于这些箭头是视图的一部分,因此无法在模型中处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 QTreeView 的行背景颜色不起作用 的相关文章

  • 简单的C问题

    作为我正在进行的项目的一部分 我必须开始学习 C 我已经开始解决其中的 欧拉 问题 并且遇到了麻烦 我必须找到 1000 以下的所有 3 或 5 的倍数之和 有人可以帮助我吗 谢谢 include
  • 在 C++ 中,当我将值传递给函数时,它是否总是转换为适当的类型?

    如果我有一个像这样的函数void func size t x 我称该函数为func 5 5 立即转换为size t类型 这通常适用于所有类型吗 我问这个问题是因为我发誓我见过人们编写代码 他们做类似的事情func 5 0 将 5 作为双精度
  • 为什么在 OpenCV 中访问该矩阵时出现内存错误?

    我只是想写入给定大小的矩阵 当我在 Valgrind 中运行该程序时 出现内存错误 如下所示 主要 cpp include
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • std::async 参数的生命周期是多少?

    看来函数的参数是通过std async分享未来的生活 include
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • 是否可以获取指向装箱非托管值类型的指针?

    是否可以获取指向装箱非托管值类型的指针 而无需编写对每个支持的类型进行强制转换的大型 switch 语句 就像是 object val Contains a boxed unmanaged value such as int long by
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • 在 Windows 上静默安装 Qt55 Enterprise

    编辑 在 Qt 支持的帮助下 我已经解决了如何自动化 Qt 企业安装程序的这两个部分 下面是脚本调用 我正在尝试在 Windows 8 1 和 Windows 10 上静默安装 Qt 5 5 1 Enterprise 使用 script 开
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • 如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows? [复制]

    这个问题在这里已经有答案了 如果有一些跨平台 C C 代码需要在 Mac OS X iOS Linux Windows 上编译 我如何在预处理器过程中可靠地检测到它们 大多数编译器都使用预定义的宏 您可以找到列表here http sour
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • 您的 C++ 程序中是否仍然存在内存分配失败问题 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在为公司写一些指导方针 我需要回答一些棘手的问题 这一项是相当困难的 解决方案可以是 根本不跟踪 确保使用 new 分配对象 这会在分配失败
  • C++ 项目编译为静态库,编译为动态库失败(链接器错误)。为什么?

    我有一个 VS2008 本机 C 项目 我希望将其编译为 DLL 它仅引用一个外部库 log4cplus lib 并使用其功能 当然也使用 log4cplus 的 h 文件 当我尝试将我的项目编译为静态库时 它成功了 当我尝试作为 DLL
  • 使texture2D在运行时/脚本Unity3D中可读[重复]

    这个问题在这里已经有答案了 我有一个插件 可以让我访问 Android 手机图库中的图片 这给了我一个Texture2D类型的纹理 然后我想使用 GetPixels 函数对其进行编辑 但默认情况下它未设置为可读 如何使纹理可读 以便我可以在
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用

随机推荐

  • Winform 启动画面 - VB.NET - 计时器

    我的应用程序和该表单上有一个启动屏幕 我有一个计时器 Private Sub Splash Load ByVal sender As Object ByVal e As System EventArgs Handles Me Load Sp
  • symfony2:在控制器操作内部设置表单外部的表单字段的值

    我需要设置 symfony2 表单元素的值 我使用一个doctrine2实体 一个Symfony Component Form AbstractType以及我的控制器操作中的 createForm 方法 saleDataForm this
  • iphone:如果浮点数为负数,则转换为无符号整数的浮点数将设置为 0?

    试试看 volatile float bob 344 0f unsigned int fred unsigned int bob printf d n fred 输出将为 0 显然 我希望它能够回绕 就像我从一个有符号的 int 转换为一个
  • 如何将 Sql Server 2008 DateTimeOffset 转换为 DateTime

    我希望转换一个有DATETIMEOFFSET场 下降到DATETIME字段但通过注意偏移量来重新计算时间 实际上 这将值转换为UTC eg CreatedOn 2008 12 19 17 30 09 0000000 11 00 将被转换为
  • 透明背景

    如何让背景50 透明 假设 AbsoluteLayout 的背景很暗 但您仍然可以看到它 您可以将透明主题应用于所需的活动 在 res values style xml 中创建新样式
  • Rails 5.1 中还需要 `require jquery_ujs` 吗?

    我正在我的中安装 jQuery5 1 xRails 应用程序通过jquery rails gem 在 gem 设置中 他们建议将这些行添加到application js默认情况下 require jquery require jquery
  • 使用 nginx 在同一域上提供 React 前端和 php 后端

    我有一个 React 前端和一个 Symfony 后端 我试图在同一个域上提供服务 React 前端需要提供资产 如果存在 否则需要提供回退服务index html 我想在以下情况下提供 php Symfony 应用程序 api位于请求 u
  • 了解 Spark shuffle 溢出

    如果我理解正确的话 当一个reduce任务开始收集它的输入shuffle块 来自不同map任务的输出 时 它首先将它们保存在内存中 Q1 当执行器的 shuffles 保留内存量 在内存管理更改之前 Q2 耗尽时 内存中的数据将 溢出 到磁
  • SQL:如果不存在如何更新或插入?

    我下面有一个 SQL 插入 工作正常 但是我希望它检查 DATE xxxx NAME xxxx 和 JOB xxx 是否存在 并更新 HOURS 如果存在 否则插入新行 这可以用 SQL 实现吗 INSERT INTO TABLE NAME
  • 从内部类对象获取外部类对象

    我有以下代码 我想获取创建内部类对象的外部类对象inner 我该怎么做 public class OuterClass public class InnerClass private String name Peakit public st
  • 简单的串行点对点通信协议

    我需要两个设备 PC 和微控制器 之间的简单通信协议 PC必须向微处理器发送一些命令和参数 微控制器必须传输字节数组 来自传感器的数据 数据必须是噪音保护 除了奇偶校验之外 我想我还需要一些其他的数据校正方法 有没有标准的解决方案可以做到这
  • python字典中循环(for循环)的顺序是什么[重复]

    这个问题在这里已经有答案了 我对以下内容得到的输出有点困惑 我不明白循环的执行顺序 domains de Germany sk Slovakia hu Hungary us United States no Norway for key i
  • 在 C++11 中保存随机数生成器状态

    我希望能够将随机数生成器的状态保存在 txt 文件中并将其读回 我听说在 c 11 中 可以使用 gt 运算符来完成此操作 但是 我不确定我到底该怎么做 我有一个随机数生成器 初始化如下 mt19937 myRandomGenerator
  • 允许特定标签覆盖溢出:隐藏

    我有一个 div 这是一定的height and width and overflow hidden以便剪裁特定的内部图像 不过我想要一张图片 div 弹出边界 即覆盖overflow hidden 我该怎么做呢 诀窍是保持overflow
  • 在创建时设置全屏

    我只能在 onCreate 方法中将 Activity 设置为全屏 在 setContentView 之前 有什么方法可以在 onCreate 之外设置为全屏吗 Thanks 有可能 添加此代码 go full screen WindowM
  • Android Service 多个实例

    我对 Android 服务类还是有点陌生 我知道您需要使用 startService intent 从应用程序启动服务 但是我的问题是我的服务内部有方法 我需要以意图启动服务 然后在我的活动中创建该类的对象 以便我可以调用服务的方法 问题是
  • Flutter 上用于位置设置的本机对话框

    有没有办法实现位置设置对话框 如下图所示 当应用程序需要 GPS 位置但找不到时会触发该对话框 打OK将立即打开系统 GPS 这对于用户来说似乎更方便 而不是把他们带到某个位置并手动打开 Flutter 中可以实现这样的功能吗 对话框的展开
  • JavaScript中获取对象的所有函数

    例如 Math mymfunc function x return x 1 将被视为财产 当我写时 for var p in Math proto console log p 它将被显示 但其余的数学函数不会 如何获取 Math 对象的所有
  • Facebook 身份验证和奇怪的重定向行为

    我目前正在使用 facebook connect 测试 OAuth 实现http facebooksdk codeplex com 我有一个 FacebookController 有 2 个简单的操作 称为LogOn and CallBac
  • 更改 QTreeView 的行背景颜色不起作用

    我有一个QTreeView并希望根据行的内容使用不同的背景颜色 为了实现这一目标 我导出了一个class MyTreeView from QTreeView并实现了paint方法如下 void MyTreeView drawRow QPai