QT:当鼠标按下时,窗口跟随鼠标走
***.h:
#include <QPoint>
#include <QMouseEvent>
class xxx{
……
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *envet);
private:
QPoint relativePos; // store relative position
……
}
***.cpp
void Desktop::mousePressEvent(QMouseEvent *event)
{
relativePos=this->pos()-event->globalPos();
}
void Desktop::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos()+ relativePos);
}
先上代码,这里作解释:
1)要包含<QPoint> <QMouseEvent>这两个头文件,QPoint用来记录坐标,通过重新实现QMouseEvent鼠标相关事件实现当鼠标按下并移动时,窗口跟随鼠标移动。
2) 使用relativePos记录窗口顶点与鼠标按下时位置的差值。使用表达式:relativePos=this->pos()-event->globalPos();
3)当鼠标释放后,将窗口顶点的坐标设置为鼠标当前的坐标加上之前的差值。使用表达式:this->move(event->globalPos()+ relativePos);