QProgressBar :在保持操作系统样式的同时更改颜色
QProgressBar : Change color while keeping OS style
我知道Qt默认使用操作系统样式来装饰QProgressBar
。
我想知道是否有办法在保持操作系统样式的同时更改QProgressBar
的颜色。
我尝试了几种方法,如下所示。
更改调色板:
QPalette palette = myProgressBar->palette();
palette.setBrush(QPalette::Highlight, someColor); // setColor() did the same
myProgressBar->setPalette(palette);
直接更改样式:
QPalette palette = myProgressBar->palette();
palette.setBrush(QPalette::Highlight, someColor); // setColor() did the same
myProgressBar->style()->polish(palette);
但这两种方法都被完全忽略了,没有任何改变。
我发现更改QProgressBar
颜色的唯一方法是通过setStyleSheet()
设置样式表。问题是它同时忽略了操作系统样式。
我认为可以在样式表中大致复制操作系统样式,但我不知道是否可以直接应用操作系统样式而只更改调色板。
我将不胜感激任何有用的答案。
编辑:操作系统未修复。我正在尝试使其在Windows下工作,但该应用程序可能/将在另一个操作系统(某些Linux发行版)下运行。
这取决于您使用的样式。一般来说,Qt特定的主题(如融合)可以通过更改调色板轻松定制(请注意,不同的样式可能使用不同的调色板角色)。
但是,对于操作系统特定的样式(如QWindowsVistaStyle
),您根本无法做到这一点。 原因是样式实现忽略了调色板并使用操作系统主题中的颜色。
例如,如果您查看QWindowsXPStyle
的实现,您会发现对GetThemeColor()
的调用,该调用从操作系统返回颜色。
这些特定于操作系统的样式也无法正确使用样式表,这就是为什么如果您使用样式表,小部件将回退到默认样式。
我相信您唯一的解决方案是使用QProxyStyle
,但您可能需要重写代码以绘制要自定义的小部件的一部分。