***.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);