2

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

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

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

在此处输入图像描述

4

2 回答 2

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));
}
于 2013-06-14T06:36:56.120 回答
1

如果您知道滑块的大小(以像素为单位),您也可以使用Qt 样式表来设置凹槽的样式

于 2013-06-14T08:00:29.943 回答