qq_41834573
0ices
2021-05-12 17:10
采纳率: 90%
浏览 22

Qt 想写一个滑动条是由低到高的三角形的slider

QSlider好像只能是长条状的,有什么好的实现方式吗

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • kenfan1647
    友善啊,朋友 2021-05-12 20:47
    已采纳
    点赞 1 评论
  • qfl_sdu
    qfl_sdu 2021-05-12 17:31

    可以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(":/sliderGroove.png") );//设置进度条图片
                QPixmap hndl = cached( tr(":/sliderHandle.png") );//设置滑块图片
                QPixmap hndlMove = cached( tr(":/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;

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

    如有帮助,请采纳一下,谢谢。

    点赞 1 评论

相关推荐