关于自制QSlider
我网上找了只有QSS的 好像没有代码的。
看论坛 说是可以做的
我现在想问几个问题
1: QSlider::handle 这个东西用代码表示是那个变量?
2: QSlider::groove 和上面一样
还有这个二个
QSlider::add-page
QSlider::sub-page
我看了 QSlider和QAbstractSlider 好像只有没有相关 滑块的和槽的变量。
我那边错哪位大仙指导下,结贴率我还是相当自信的。大神们出来指导下。
[解决办法]
可以setStyle(new style);
在style中重写函数drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,QPainter *painter, const QWidget *widget) const,在函数中画slider。
case CC_Slider:
if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
QRect groove = subControlRect(CC_Slider, option, SC_SliderGroove, widget);
QRect handle = subControlRect(CC_Slider, option, SC_SliderHandle, widget);
painter->save();
QPixmap grv = cached( tr(":/MyQTInterface/Resources/sliderGroove.png") );//设置进度条图片
QPixmap hndl = cached( tr(":/MyQTInterface/Resources/sliderHandle.png") );//设置滑块图片
QPixmap hndlMove = cached( tr(":/MyQTInterface/Resources/sliderHandleMove.png"));
if ((option->subControls & SC_SliderGroove) && groove.isValid() && handle.isValid()) {
painter->drawPixmap(QRect(groove.x() , groove.y()-2 ,
groove.width(), grv.height()),
grv);
}
//如果被选中
if ((option->subControls & SC_SliderHandle) && (slider->state & State_Sunken))
painter->drawPixmap(handle.topLeft(), hndlMove);
else if((option->subControls & SC_SliderHandle))
painter->drawPixmap(handle.topLeft(), hndl);
painter->restore();
}
break;