* * 鼠标按下操作 * 记录当前坐标 */ static QPoint last(0,0); //保存坐标 const int TITLE_HEIGHT = 50; //这里也可以使用宏定义,保存标题高度,也就是鼠标点击区域的高度 void MainWindow::mousePressEvent(QMouseEvent *event) { if(event->y()<TITLE_HEIGHT) { last = event->globalPos(); } } /* * 鼠标移动函数 * 这里实时修改窗口的坐标 */ void MainWindow::mouseMoveEvent(QMouseEvent *event) { if(event->y()<TITLE_HEIGHT) { int dx = event->globalX() - last.x(); int dy = event->globalY() - last.y(); last = event->globalPos(); this->move(this->x()+dx,this->y()+dy); } } /* * 鼠标释放函数 */ void MainWindow::mouseReleaseEvent(QMouseEvent *event) { if(event->y()<TITLE_HEIGHT) { int dx = event->globalX() - last.x(); int dy = event->globalY() - last.y(); this->move(this->x()+dx,this->y()+dy); } }
在Qt6中有部分变化,如下,当时,沿用Qt5中的代码除了警告是没有其他问题的。
static QPoint last(0,0); //保存坐标 const int TITLE_HEIGHT = 50; //这里也可以使用宏定义,保存标题高度,也就是鼠标点击区域的高度 void MainWindow::mousePressEvent(QMouseEvent *event) { if(event->position().y()<TITLE_HEIGHT) { last = event->globalPosition().toPoint(); } } void MainWindow::mouseMoveEvent(QMouseEvent *event) { if(event->position().y()<TITLE_HEIGHT) { int dx = event->globalPosition().x() - last.x(); int dy = event->globalPosition().y() - last.y(); last = event->globalPosition().toPoint(); this->move(this->x()+dx,this->y()+dy); } } void MainWindow::mouseReleaseEvent(QMouseEvent *event) { if(event->position().y()<TITLE_HEIGHT) { int dx = event->globalPosition().x() - last.x(); int dy = event->globalPosition().y() - last.y(); this->move(this->x()+dx,this->y()+dy); } }