用drawComplexControl 重绘slider,为啥滑块,线糟还在?
用drawComplexControl 重绘slider,为什么滑块,线糟还在??
void MySliderStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *w) const{
if(cc == CC_Slider){
if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(opt)) {
QRect groove = subControlRect(CC_Slider, opt, SC_SliderGroove, w);
QRect handle = subControlRect(CC_Slider, opt, SC_SliderHandle, w);
p->save();
QPixmap grv;
grv.load( ":/new/prefix1/image/2.png" );
QPixmap hndl;
hndl.load( ":/new/prefix1/image/1.png" );
QPixmap hndlMove;
hndlMove.load( ":/new/prefix1/image/3.png" );
// QPixmap grv = cached( tr(":/MyQTInterface/Resources/sliderGroove.png") );//设置进度条图片
// QPixmap hndl = cached( tr(":/MyQTInterface/Resources/sliderHandle.png") );//设置滑块图片
// QPixmap hndlMove = cached( tr(":/MyQTInterface/Resources/sliderHandleMove.png"));
int duration = slider->maximum - slider->minimum;
int pos = (slider->sliderPosition-slider->minimum)*slider->rect.width() / duration;
if ((opt->subControls & SC_SliderGroove) && groove.isValid() && handle.isValid()) {
p->drawPixmap(QRect(groove.x() , groove.y() ,
pos, slider->rect.height()),
grv);
p->drawPixmap(QRect(groove.x()+pos , groove.y() ,
slider->rect.width()-pos, slider->rect.height()),
hndl);
}
//如果被选中
if ((opt->subControls & SC_SliderHandle) && (slider->state & State_Sunken))
p->drawPixmap(handle.topLeft(), hndlMove);
else if((opt->subControls & SC_SliderHandle))
p->drawPixmap(handle.topLeft(), hndl);
p->restore();
}
}
QPlastiqueStyle::drawComplexControl(cc, opt, p, w);
}
------解决思路----------------------
update就可以。你看看paintevent里是不是在切换时没有关掉另一个显示
void MySliderStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *w) const{
if(cc == CC_Slider){
if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(opt)) {
QRect groove = subControlRect(CC_Slider, opt, SC_SliderGroove, w);
QRect handle = subControlRect(CC_Slider, opt, SC_SliderHandle, w);
p->save();
QPixmap grv;
grv.load( ":/new/prefix1/image/2.png" );
QPixmap hndl;
hndl.load( ":/new/prefix1/image/1.png" );
QPixmap hndlMove;
hndlMove.load( ":/new/prefix1/image/3.png" );
// QPixmap grv = cached( tr(":/MyQTInterface/Resources/sliderGroove.png") );//设置进度条图片
// QPixmap hndl = cached( tr(":/MyQTInterface/Resources/sliderHandle.png") );//设置滑块图片
// QPixmap hndlMove = cached( tr(":/MyQTInterface/Resources/sliderHandleMove.png"));
int duration = slider->maximum - slider->minimum;
int pos = (slider->sliderPosition-slider->minimum)*slider->rect.width() / duration;
if ((opt->subControls & SC_SliderGroove) && groove.isValid() && handle.isValid()) {
p->drawPixmap(QRect(groove.x() , groove.y() ,
pos, slider->rect.height()),
grv);
p->drawPixmap(QRect(groove.x()+pos , groove.y() ,
slider->rect.width()-pos, slider->rect.height()),
hndl);
}
//如果被选中
if ((opt->subControls & SC_SliderHandle) && (slider->state & State_Sunken))
p->drawPixmap(handle.topLeft(), hndlMove);
else if((opt->subControls & SC_SliderHandle))
p->drawPixmap(handle.topLeft(), hndl);
p->restore();
}
}
QPlastiqueStyle::drawComplexControl(cc, opt, p, w);
}
------解决思路----------------------
update就可以。你看看paintevent里是不是在切换时没有关掉另一个显示