我尝试更改QSlider上的手柄颜色失败了。如何将其更改为自定义颜色?我已经将QSlider子类化,以便我可以重新实现paint事件并在其上绘制我自己的矩形 - 现在我想设置句柄的颜色。在子类窗口小部件的创建者中,我这样做了:
setStyleSheet("handle:horizontal {color: red}");
除了颜色之外,我还尝试了各种其他属性,包括背景色等等 - 在小部件上根本没有任何改变 - 它仍然是默认的灰色。我发誓我的代码根本没有执行,但我在调试器中检查了它,它就是。
我尝试将setStyleSheet移动到我的paintEvent中;没有任何区别。这是paintEvent - 我不知道它是否重要,但我怀疑如果我不包括它我会被要求它
void FilledSlider::paintEvent(QPaintEvent *ev) {
QStyleOptionSlider opt;
initStyleOption(&opt);
opt.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle;
if (tickPosition() != NoTicks)
{
opt.subControls |= QStyle::SC_SliderTickmarks;
}
QRect groove_rect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this);
QSlider::paintEvent(ev);
int grooveCenter = groove_rect.bottom() - (groove_rect.bottom() - groove_rect.top())/2.0;
QRect fillRectangle;
int left;
int width;
if(direction < 0)
{
left = groove_rect.left() + ((1.0 -filledPercentage) * groove_rect.width());
width = filledPercentage * groove_rect.width();
}
else
{
left = groove_rect.left();
width = groove_rect.width() * filledPercentage;
}
fillRectangle.setRect(left, grooveCenter, width, 0.2*groove_rect.height());
QPainter painter(this);
painter.fillRect(fillRectangle, QBrush(Qt::red));
}
答案 0 :(得分:1)
对应于此尝试setStyleSheet(&#34; QSlider :: handle:horizontal {background-color:red;}&#34;);.
这就是答案,谢谢iloXXI!