Bootstrap

【接口封装】——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);

;