sosoboy

导航

Qt QSlider点击和拖动

在Qt中Qslider的单击并不是直接移动到点击的位置,而是每点一次移动一步。这在给播放器的体验效果很差,所以很是有必要自己来实现。但是必须注意到的一个问题是QSlider的拖动,如果处理不好点击和拖动会冲突造成功能失效。处理这个问题可以从QSlider继承过来,重新实现鼠标点击事件,可以重新实现鼠标按下或者释放这个事件来完成这个效果。建议重新实现鼠标左键按下的事件。废话说多了,上代码把:

自己实现一个滑动条类,重写 mousePressEvent

class QkSlider : public QSlider { public: SliderClick(QWidget *parent = 0) : QSlider(parent) { } protected: void mousePressEvent(QMouseEvent *ev) { //注意应先调用父类的鼠标点击处理事件,这样可以不影响拖动的情况 QSlider::mousePressEvent(ev); //获取鼠标的位置,这里并不能直接从ev中取值(因为如果是拖动的话,鼠标开始点击的位置没有意义了) double pos = ev->pos().x() / (double)width(); setValue(pos * (maximum() - minimum()) + minimum()); } };


然后在调用的时候绑定valueChanged()信号即可



posted on 2015-08-19 14:56  sosoboy  阅读(63)  评论(0)    收藏  举报