为特定范围着色QSlider

时间:2013-06-14 05:00:37

标签: qt

我有一个QSlider让我们假设它的范围是0到100,

我需要的是仅将QSlider凹槽的背景颜色从20到80范围内着色。

下面我添加了一个示例图片。

enter image description here

2 个答案:

答案 0 :(得分:4)

我建议您继承QSlider并重新实现paintEvent,如下所示:

void My_slider::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);
  qDebug() << groove_rect;
  QSlider::paintEvent(ev);
  QRect rect(groove_rect.left() + 0.2 * groove_rect.width(), groove_rect.top(), 0.6 * groove_rect.width(), groove_rect.height());
  QPainter painter(this);
  painter.fillRect(rect, QBrush(Qt::red));
}

答案 1 :(得分:1)

如果你知道滑块的大小(以像素为单位),你也可以使用Qt style sheets to style the groove