【接口封装】——2、鼠标移动窗体
函数定义
头文件:
#include <QMouseEvent>
#include <QWidget>
父类:QWidget
enum ButtonType { MIN_CLOSE_BUTTON = 0 , //最小化及关闭按钮 MIN_MAX_CLOSE_BUTTON, //最小化、最大化及关闭按钮 CLOSE_BUTTON //仅有关闭按钮 }; //移动窗口的变量 bool moveAble; QPoint startMovePos;//开始移动的点坐标
源代码:
按压事件:
//通过鼠标按下、鼠标移动、鼠标释放事件实现拖动标题栏达到移动窗口效果 void TitleBar::mousePressEvent(QMouseEvent* event) { if (btnType == MIN_MAX_CLOSE_BUTTON) { //在窗口最大化时禁止拖动窗口 if (ui.ButtonMax->isVisible()) { moveAble = true; startMovePos = event->globalPos();//globalPos()返回事件发生时鼠标坐在的全局位置 } } else { moveAble = true; startMovePos = event->globalPos(); } //如果重写了父类的事件函数,则返回重新调用一次,以保证调用了父类 return QWidget::mousePressEvent(event); }
移动事件:
void TitleBar::mouseMoveEvent(QMouseEvent* event) { if (moveAble) { QPoint movePoint = event->globalPos() - startMovePos;//鼠标的全局坐标 QPoint windowPoint = parentWidget()->pos();//父窗体的坐标 QPoint windowMovePoint = windowPoint + movePoint;//父窗体需要移动的坐标 parentWidget()->move(windowMovePoint); startMovePos = event->globalPos();//更新当前坐标 } return QWidget::mouseMoveEvent(event); }
注:
//如果重写了父类的事件函数,则返回重新调用一次,以保证调用了父类
return QWidget::mousePressEvent(event);
原文地址:https://blog.csdn.net/the_dry/article/details/143976894
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!