如何在不更改标准滑块形状的情况下为 Qslider 手柄重新着色?
How do I recolor the Qslider handle without changing the standard slider shape?
当我使用 setStyleSheet 更改标准滑块 时:
mySlider = new QSlider(Qt::Horizontal, this);
mySlider->setStyleSheet("QSlider::handle:horizontal { border: 1px solid #777; background:#92B558;}");
生成的滑块如下所示:
我想要的是用不同的颜色保持标准滑块的形状。是否有另一种方法可以为标准滑块重新着色,或创建另一个看起来相似的手柄?
恐怕这是不可能的,因为滑块的形状实际上是使用应用程序 QStyle 绘制的。
为滑块分配样式 sheet 规则时,该规则将覆盖 QStyle 完成的绘制。查看 QFusionStyle 的实现以获取更多详细信息。
为了实现您的目标,您可以准备一个具有滑块确切形状和颜色的像素图,然后在您的样式sheet代码中将其指定为背景。
否则,您可以在 paintEvent 中创建子类并自己完成所有绘制工作,但如果您只想更改滑块的颜色恕我直言,我认为这是一种矫枉过正的做法。
当我使用 setStyleSheet 更改标准滑块
mySlider = new QSlider(Qt::Horizontal, this);
mySlider->setStyleSheet("QSlider::handle:horizontal { border: 1px solid #777; background:#92B558;}");
生成的滑块如下所示:
我想要的是用不同的颜色保持标准滑块的形状。是否有另一种方法可以为标准滑块重新着色,或创建另一个看起来相似的手柄?
恐怕这是不可能的,因为滑块的形状实际上是使用应用程序 QStyle 绘制的。 为滑块分配样式 sheet 规则时,该规则将覆盖 QStyle 完成的绘制。查看 QFusionStyle 的实现以获取更多详细信息。
为了实现您的目标,您可以准备一个具有滑块确切形状和颜色的像素图,然后在您的样式sheet代码中将其指定为背景。
否则,您可以在 paintEvent 中创建子类并自己完成所有绘制工作,但如果您只想更改滑块的颜色恕我直言,我认为这是一种矫枉过正的做法。