QSlider의 핸들 색상을 변경하는 데 실패했습니다. 어떻게 그것을 사용자 지정 색으로 변경합니까? QSlider를 서브 클래 싱하여 페인트 이벤트를 다시 구현하고 자체 사각형을 그릴 수 있습니다. 이제 핸들 색상을 설정하고 싶습니다. 서브 클래 싱 된 위젯의 창조자, 나는이 한 - 아무것도 모든 위젯에 어떤 변화를하지 않습니다 - 나는 등의 배경 색상을 포함하여 색상 이외의 다른 속성, 모든 종류의 시도QSlider의 핸들 색상을 변경하는 방법
setStyleSheet("handle:horizontal {color: red}");
그것을 여전히 기본 회색으로 유지됩니다. 내 코드가 전혀 실행되지 않는다고 맹세 하겠지만 디버거에서 검사했습니다.
setStyleSheet를 내 paintEvent로 이동하려고 시도했습니다. 아무런 차이가 없었습니다. :이 중요한 경우 나도 몰라,하지만 난이 setStyleSheet 시도 ("QSlider에 해당하는 것이
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)에 해당하는'setStyleSheet ("QSlider :: handle : horizontal {background-color : red;}) "); 작동하지 않는다면 서브 클래스가 아닌 캐주얼'QSlider'로 시도하십시오. 'paintEvent' 또는 다른 것을 손상시킬 수 있습니다. – ilotXXI
여기에서 페인트 이벤트를 복사했습니다 : http : //stackoverflow.com/questions/17101378/coloring-qslider-for-particular-range – jhowland