我知道Qt默认使用OS风格装饰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下运行,但该应用程序可能/将在其他OS(某些Linux发行版)下运行。
答案 0 :(得分:0)
这取决于您使用的样式。通常,只需更改调色板即可轻松定制Qt特定主题(如融合)(请注意,不同样式可能使用不同的调色板角色)。
但是,对于操作系统特定的样式(例如QWindowsVistaStyle
),您根本无法做到。
原因是样式实现忽略了调色板,而是使用OS主题中的颜色。
例如,如果您查看QWindowsXPStyle
处的实现,则会发现对GetThemeColor()
的调用,该调用从操作系统返回颜色。
这些特定于OS的样式也无法正确使用样式表,这就是为什么如果您使用样式表,则小部件将回退到默认样式。
我相信您唯一的解决方案是使用QProxyStyle
,但是您可能必须重写代码以绘制要自定义的小部件的一部分。