9.7 实例鼠标拖动窗口


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

9.7 实例鼠标拖动窗口


我们知道,要实现窗口移动可以直接鼠标点住窗口的标题栏实现拖拽移动,这是窗口默认的行为

在QT中的事件响应函数为qmoveEvent


但是现实中经常需要鼠标点住窗口客户区域实现窗口的拖拽移动:

注意:一般定位鼠标坐标使用的是event->pos()和event->globalPos()两个函数。

event->pos()获取的位置是主窗口(widget窗口)左上角(边框的左上角,外左上角)相对于电脑屏幕的左上角的(x=0,y=0)偏移位置。

event->globalPos(),这个比较准确获取的鼠标位置是鼠标偏离电脑屏幕左上角(x=0,y=0)的位置;

一般不采用前者,使用前者,拖动准确性较低且会产生抖动。


//拖拽操作

void Widget::mousePressEvent(QMouseEvent *event)

{

    if(event->button() == Qt::LeftButton)

    {

        m_bDrag = true;


        //获得鼠标的初始位置

        mouseStartPoint = event->globalPos();

        //mouseStartPoint = event->pos();

  

        //获得窗口的初始位置

        windowTopLeftPoint = this->frameGeometry().topLeft();

    }

}


void Widget::mouseMoveEvent(QMouseEvent *event)

{

    if(m_bDrag)

    {

        //获得鼠标移动的距离

        //QPoint distance = event->pos() - mouseStartPoint;

        QPoint distance = event->globalPos() - mouseStartPoint;


        //改变窗口的位置

        this->move(windowTopLeftPoint + distance);

        /*

        注意:一般定位鼠标坐标使用的是event->pos()和event->globalPos()两个函数,

        event->pos()获取的位置是主窗口(widget窗口)左上角(边框的左上角,外左上角)相对于电脑屏幕的左上角的(x=0,y=0)偏移位置

        event->globalPos()获取的鼠标位置是鼠标偏离电脑屏幕左上角(x=0,y=0)的位置;

        一般不采用前者,使用前者,拖动准确性较低且会产生抖动。

        */

    }

}


好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***