在QTreeView中显示QStandardItem及其前景色,即使选中它也是如此

时间:2010-09-08 19:15:36

标签: qt

在Linux / X11上使用Qt 4.6.3。

我有一个QTreeView小部件,它使用QStandardItemModel作为其模型,有4列和数百行。列表中的大多数项目将以标准颜色显示,但少数项目需要具有不同的颜色。我可以使用QStandardItem :: setForeground()轻松更改这几个项目的颜色。

但是,只有在选择时才会影响项目的颜色。当我选择一个彩色项目时,它的背景颜色变为蓝色(这是正常的),文本颜色变为白色(这是不正常的)。我尝试使用样式表来影响所选项目的前景色(使用选择器QTreeView :: item:selected),但它会影响所有项目。

我希望我调用item->setForeground(Qt::red)的项目即使选中它们也会保持红色,而其他项目则使用默认颜色组(他们已经这样做了)。怎么办?

1 个答案:

答案 0 :(得分:3)

正在使用的颜色是(我假设)QPalette的{​​{1}}和Hightlight角色。不幸的是,我不知道如何在单个标准项目上设置它们。

但是,由于标准项目在模型/视图框架中使用,因此您有另一种选择。您应该能够创建一个委托来绘制视图,但是您想要。我建议继承样式委托,并尽可能多地调用父类的功能。可能,您只需要在选择项目并且具有非标准前景色的情况下更改一些参数。