1、使用
对于 QSlider ,很常用的使用就是,实现 void valueChanged(int value) 的槽,从而实现修改滑块值的响应。
但是信号 void valueChanged(int value) 在移动滑块过程中是连续触发的,我们常常需要的结果是滑动到目的点再处理,
使用 void setTracking(bool enable) 接口开启或关闭滑动跟踪,通过设置 setTracking(false) 使信号 void valueChanged(int value) 在滑动过程中不被触发。
2、重写 mousePressEvent 实现滑块点哪去哪
正常情况下,点击 QSlider 滑块,只是以步进减少或增加,不能一步到位,需要实现 mousePressEvent 的重写实现。
代码
void MySlider::mousePressEvent(QMouseEvent *ev)
{
// 获取当前点击位置,得到的这个鼠标坐标是相对于当前QSlider的坐标
int currentX = ev->pos().x();
// 获取当前点击的位置占整个Slider的百分比
double per = currentX *1.0 /this->width();
// 利用算得的百分比得到具体数字
int value = per*(this->maximum() - this->minimum()) + this->minimum();
qDebug() << value;
// 设定滑动条位置
this->setValue(value);
// 滑动条移动事件等事件也用到了mousePressEvent,加这句话是为了不对其产生影响,是的Slider能正常相应其他鼠标事件
QSlider::mousePressEvent(ev);
}