QT 学习 之 窗口拖拽 实现

最基本的就是计算三个值,一个定值,鼠标相对于窗口左上角的坐标,两个变值,一个是鼠标在屏幕上的绝对坐标以及窗口左上角的绝对坐标。在一次移动中鼠标相对于窗口左上角的坐标是不变,所以可以根据它来计算串窗口移动后的坐标。

代码如下:
.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);
}

猜你喜欢

转载自blog.51cto.com/11753138/2409644