gpt4 book ai didi

c++ - QProgressBar : Change color while keeping OS style

转载 作者:太空狗 更新时间:2023-10-29 23:10:36 24 4
gpt4 key购买 nike

我知道 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 ,但您可能必须重写代码以绘制您想要自定义的部件部分。

关于c++ - QProgressBar : Change color while keeping OS style,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56558606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com