函数定义
头文件:
#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);