如何在不更改标准滑块形状的情况下为 Qslider 手柄重新着色?

Posted

技术标签:

【中文标题】如何在不更改标准滑块形状的情况下为 Qslider 手柄重新着色?【英文标题】:How do I recolor the Qslider handle without changing the standard slider shape? 【发布时间】:2018-04-10 08:47:37 【问题描述】:

当我使用 setStyleSheet 更改标准滑块 时:

mySlider = new QSlider(Qt::Horizontal, this);

mySlider->setStyleSheet("QSlider::handle:horizontal  border: 1px solid #777; background:#92B558;");

生成的滑块如下所示:

我想要的是保持标准滑块的形状具有不同的颜色。是否有其他方法可以重新着色标准滑块,或创建另一个看起来相似的手柄?

【问题讨论】:

对我来说(Windows 10)手柄具有相同的矩形形状,有和没有设置样式表。您认为区别在哪里? 据我所知,样式表是不可能的。如果可能,那么只能通过覆盖绘制方法并自己绘制句柄 @vahancho 抱歉,如果你使用 myslider->setTickPosition(QSlider::TicksBelow); 【参考方案1】:

恐怕这是不可能的,因为滑块的形状实际上是使用应用程序 QStyle 绘制的。 当为滑块分配样式表规则时,该规则将覆盖由 QStyle 完成的绘制。请查看QFusionStyle 的实现以了解更多详细信息。

为了实现您的目标,您可以准备一个具有滑块确切形状和颜色的像素图,然后在样式表代码中将其指定为背景。

否则,您可以在paintEvent 中进行子类化并自己完成所有工作,但我认为如果您只想更改滑块恕我直言的颜色,那就有点过头了。

【讨论】:

以上是关于如何在不更改标准滑块形状的情况下为 Qslider 手柄重新着色?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用样式表更改 QSlider 句柄宽度

如何获取QSlider控件滑块的宽度和位置

如何获取QSlider控件滑块的宽度和位置

如何在不影响 SYSTEM/IE 代理的情况下为 Webbrowser Control 设置代理

在不使用 MVC 更改 URL 的情况下为特定 URL 创建路由

如何使 QSlider 只读?