如何更改(删除)QListWidget 的选择/活动颜色

vic*_*ann 3 qt qlistwidget qt5 qpalette

在我的中QListWidget,有一些项目具有非默认背景颜色,我在自定义QListWidget类中将它们设置如下:

item->setBackgroundColor(qcolor); // item is of type QListWidgetItem*
Run Code Online (Sandbox Code Playgroud)

我设置的那些非默认颜色会被 的QListWidget选择颜色扭曲。看一个例子:

在此输入图像描述

项目threefour应该是相同的颜色,但由于four选择了该项目,因此它们不是相同的颜色,因此结果颜色是原始颜色和QListWidget的选择(活动项目?)颜色的总和。

我的问题是如何编辑或删除该选择颜色?

我在我的内部尝试过QListWidget(当我想更改项目的背景颜色时在特殊插槽中):

QPalette pal = this->palette();
pal.setColor(QPalette::Highlight, QColor(255,255,255,0));
this->setPalette(pal); // updated
Run Code Online (Sandbox Code Playgroud)

但并没有产生任何效果。我究竟做错了什么?设置的变量是否正确?QListWidget我是在其委托内部还是在其委托内部设置它?

更新:我尝试使用评论/答案所指出的样式表,但是,不可能将它们用于我的应用程序,因为我行中的项目有 3 种状态(所以我需要使用三种颜色)。例如,3 个状态对应于三种颜色:粉色表示活动,绿色表示不活动,灰色表示其余。使用样式表时,我无法将自定义属性(比方说QListWidget::item[Inactive="true"])设置为 single QListWidgetItem,但对于 full QListWidget,因此它将所有行设置为相同的颜色。

在这里尝试使用样式表来解决类似的问题,但没有成功,因此我得出结论,使用样式表不是正确的方法。

我最初使用的背景更改方法可以很好地满足我的目的,但我无法弄清楚如何摆脱默认选择颜色(透明浅蓝色),它会添加到背景颜色并产生混合颜色。

Mil*_*fie 6

我认为使用样式表来做到这一点会更好。这是一个例子

QListWidget::item
{
    background: rgb(255,255,255); 
}
QListWidget::item:selected
{
    background: rgb(128,128,255);
}
Run Code Online (Sandbox Code Playgroud)

::item指示QListWidget中的各个项目,而:selected指示当前选择的QListWidgetItems 。

然后,要获取特定小部件的自定义背景,您可以使用自定义样式表属性。在您的代码中,在您想要应用自定义样式的小部件上调用类似的内容:

myList->setProperty( "Custom", "true" );

//  Updates the style.
style->unpolish( myList );
style->polish( myList );
Run Code Online (Sandbox Code Playgroud)

然后在样式表中,定义自定义属性的样式,如下所示。

QListWidget::item[Custom="true"]
{
    background: rgb(128,255,128);
}
Run Code Online (Sandbox Code Playgroud)