QTextEdit 实现触控滑动文本

本文介绍了两种在Qt中实现鼠标事件驱动的滚动条控制方法。第一种是通过QScroller设置左键点击触发滚动,但可能在复杂项目中偶尔失效。第二种方法涉及重写鼠标按下、移动和释放事件,实现在BTextEdit中精确控制滚动条的位置。这种方法可以避免鼠标事件触发的不确定性问题。
摘要由CSDN通过智能技术生成

两种方法实现:

第一种:

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();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值