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

posted @ 2012-03-12 16:13  G背包  阅读(4328)  评论(0编辑  收藏  举报