在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()信号即可