*
* 滑鼠按下操作
* 記錄目前坐标
*/
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);
}
}