当前位置: 首页 > article >正文

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


http://www.kler.cn/a/407224.html

相关文章:

  • Python网络爬虫实践案例:爬取猫眼电影Top100
  • ssm150旅游网站的设计与实现+jsp(论文+源码)_kaic
  • 大数据调度组件之Apache DolphinScheduler
  • 工商业光储充,储能协调控制器助力能源新变革
  • Oralce数据库巡检SQL脚本
  • AVL树实现
  • IDEA2023版本中如何启动项目的多个实例
  • 关于C/C++Windows下连接MYSQL操作
  • 【深度学习之二】正则化函数(weight decay, dropout, label smoothing, and etc)详解,以及不同的函数适用的场景
  • 闫妮—《小巷人家》中的宝藏演员
  • Linux各种并发服务器优缺点
  • Vue3移动端-点餐项目
  • AOC显示器915Sw按键失灵维修记
  • Java爬虫:获取商品详情的实践之旅
  • 在Ubuntu上使用Python和OpenCV库来处理和显示图片
  • 【学习】使用pam_cracklib校验密码复杂度
  • Java程序设计——(一)Java开发入门(1)Java程序的基本格式
  • Python和Julia(多语言)急性呼吸窘迫综合征
  • 32、js弹框操作
  • Gate学习(5) 指令学习2