两种方法实现:
第一种:
QScroller::grabGesture(this,QScroller::LeftMouseButtonGesture);
QScroller默认是触摸事件触发,这里更改为鼠标左键点击触发。
Ps:一开始我是采用这种简洁明了的,后来项目复杂后,导致这个方法会偶尔失效,原因尚未明确。
第二种:
需要将鼠标的按下,移动,释放事件进行重写。
void BTextEdit::mouseMoveEvent(QMouseEvent *e)
{
//滑动方向,按需调整
int nMoveSize = bDirection ? (nPressMouseY - e->y()) : (e->y() - nPressMouseY);
if(nMoveSize <= 5 && nMoveSize >= -5){//防止刚接触时的闪烁
return;
}
int nMoveBarValue = nScrollPosition + (nMoveSize);
this->verticalScrollBar()->setSliderPosition(nMoveBarValue);
}
void BTextEdit::mousePressEvent(QMouseEvent *e)
{
if(nScrollPosition < 0){//nScrollPosition默认值为-1
//首次定位的位置,可按需调节
nScrollPosition = this->verticalScrollBar()->maximum();
}else{//记录按下时滚动条的值
nScrollPosition = this->verticalScrollBar()->sliderPosition();
}
nPressMouseY = e->y();
}