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