最基本的就是计算三个值,一个定值,鼠标相对于窗口左上角的坐标,两个变值,一个是鼠标在屏幕上的绝对坐标以及窗口左上角的绝对坐标。在一次移动中鼠标相对于窗口左上角的坐标是不变,所以可以根据它来计算串窗口移动后的坐标。
代码如下:
.h 文件应该添加的函数
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
QPoint mouse_relative_pos;
.cpp 文件实现
void Widget::mouseMoveEvent(QMouseEvent *event)
{
QPoint mouse_global_pos = event->globalPos(); //取到鼠标的绝对位置
QPoint window_top_left = this->geometry().topLeft(); //取到窗口左上角的绝对位置
QPoint move_point = mouse_global_pos - mouse_relative_pos; //得到窗口左上角的绝对位置
this->move(move_point);
}
void Widget::mousePressEvent(QMouseEvent *event)
{
QPoint mouse_global_pos = event->globalPos();
QPoint window_top_left = this->geometry().topLeft();
mouse_relative_pos = mouse_global_pos - window_top_left; //得到鼠标相对于窗口左上角的坐标,移动时,这个值是一直不变的
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
mouse_relative_pos.setX(0);
mouse_relative_pos.setY(0);
}