本文共 982 字,大约阅读时间需要 3 分钟。
最基本的就是计算三个值,一个定值,鼠标相对于窗口左上角的坐标,两个变值,一个是鼠标在屏幕上的绝对坐标以及窗口左上角的绝对坐标。在一次移动中鼠标相对于窗口左上角的坐标是不变,所以可以根据它来计算串窗口移动后的坐标。
代码如下:
.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);}
转载于:https://blog.51cto.com/11753138/2409644