自学内容网 自学内容网

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