Я безуспешно пытаюсь изменить цвет ручки на QSlider. Как изменить его на пользовательский цвет? У меня есть subclassed QSlider, так что я могу переопределить событие paint и нарисовать свой собственный прямоугольник на нем - теперь я хочу установить цвет дескриптора. В создателю подклассов виджета, я сделал это:Как изменить цвет ручки на QSlider
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));
}
Где вы узнали, как написать это событие рисования? Интересуетесь ссылками, которые вы использовали. Это может помочь мне найти ответ. –
Соответствует [this] (http://doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qslider) try 'setStyleSheet (" QSlider :: handle: horizontal {background-color: red;} «);'. Если это не сработает, попробуйте его с помощью случайного 'QSlider', а не подкласса. Вы можете повредить 'paintEvent' или что-то еще. – ilotXXI
Я скопировал событие рисования отсюда: http: //stackoverflow.com/questions/17101378/coloring-qslider-for-particular-range – jhowland