QT通过QTimer与鼠标坐标获取鼠标拖动距离(可用于实现随意拖动图像)

要获得鼠标拖动距离,由于没有现成的函数可供使用,因此我们需要结合已有的函数实现距离的获取。

QTimer中有个timeout信号,我们事先设定好时间间隔,每完成一个时间间隔的计数就发出这个信号,因此我们可以在鼠标按下后每隔一个很小的时间间隔就获取一次鼠标坐标,然后计算这个很小时间间隔中鼠标的移动距离,从而调整我们图像的位置。

具体实现时我们采用connect函数将timeout信号与lanbuta函数连接,在lanbuta函数中计算得出距离,或者直接对我们的图像位置做出修改.

 m_timer.setInterval(25);//设置时间间隔,可根据需求修改,单位ms,m_timer要求已放在头文件中声明

connect(&m_timer,&QTimer::timeout,[=]{
   
        QPoint currentPos = QCursor::pos();//获取当前鼠标坐标
        int distance1 = currentPos.x() - m_lastPos.x();// 计算鼠标横向拖动距离
        int distance2=currentPos.y()-m_lastPos.y();//计算鼠标纵向拖动距离
        if(abs(distance1)<50&&abs(distance2)<50){//防止出现图像跳动的BUG,数字可以根据个人需求更改
            .......//对图像进行的操作
        }
       
        
        m_lastPos = currentPos;//更新上一个坐标位置,m_lastPos要求已在头文件中声明
    });

但只有这个还不够,我们不能让qtimer在不用的时候一直跑,一直timeout,因为我们要计算的是鼠标拖动时的距离,只有鼠标按下拖动才让图像移动,因此还需要在鼠标按下与释放时进行操作.

void MainWindow::mousePressEvent(QMouseEvent *event){

    if(event->button()==Qt::LeftButton){
        qDebug()<<"左键按下";
        m_timer.start();//启动计时器  
    }}
void MainWindow::mouseReleaseEvent(QMouseEvent *event){
    if(event->button()==Qt::LeftButton){
        qDebug()<<"左键松开";
        m_timer.stop();//暂停计时器
        }}

最后,注意要包含的头文件

#include<QMouseEvent>
#include<QTimer>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值