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)的位置;
一般不采用前者,使用前者,拖动准确性较低且会产生抖动。
*/
}
}
好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***