特定范围的着色 QSlider

Siv*_*vam 2 qt

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

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

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

在此处输入图片说明

Pav*_*hov 5

我建议您将 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));
}
Run Code Online (Sandbox Code Playgroud)