2016-07-29 11 views
0

Я безуспешно пытаюсь изменить цвет ручки на 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)); 
} 
+0

Где вы узнали, как написать это событие рисования? Интересуетесь ссылками, которые вы использовали. Это может помочь мне найти ответ. –

+1

Соответствует [this] (http://doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qslider) try 'setStyleSheet (" QSlider :: handle: horizontal {background-color: red;} «);'. Если это не сработает, попробуйте его с помощью случайного 'QSlider', а не подкласса. Вы можете повредить 'paintEvent' или что-то еще. – ilotXXI

+0

Я скопировал событие рисования отсюда: http: //stackoverflow.com/questions/17101378/coloring-qslider-for-particular-range – jhowland

ответ

0

В соответствии с этим попробовать setStyleSheet ("QSlider: : handle: horizontal {background-color: red;} ") ;.

это был ответ, спасибо iloXXI!