首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

关于自持QSlider

2013-05-02 
关于自制QSlider我网上找了只有QSS的 好像没有代码的。看论坛 说是可以做的我现在想问几个问题1: QSlider::

关于自制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;


图片根据自己需要换上自己喜欢的就可以了。 
 

热点排行