Qt自定义弹窗,拖着标题栏移动

20 篇文章 1 订阅
2 篇文章 0 订阅
在项目中,Qt原生的控件窗口风格是无法满足项目要求,因此需要自己封装特有的风格窗口,但是自己封装的窗口拖动标题栏是无法移动的,只能自己编写移动方法, 我自己是在弹窗最上面有个小QWidget:

在这里插入图片描述

1.自定义的类是继承QDialog或者QWidget
2.重写三个接口mousePressEvent(QMouseEvent* pEvent)mouseReleaseEvent(QMouseEvent* pEvent)mouseMoveEvent(QMouseEvent* pEvent)
3.分别在上面三个接口中实现窗口移动的功能
头文件中定义bool  m_mouseClicked = falsevoid MessageDialog::mousePressEvent(QMouseEvent* pEvent)
{
	if (pEvent->button() == Qt::LeftButton)
	{
		auto winPos = ui->widget->pos();
		auto mousePos = pEvent->pos();
		//判断鼠标点击坐标是否在自定义窗口的标题栏中
		if (winPos.x() <= mousePos.x() && winPos.y() <= mousePos.y()
			&& (winPos.x() + ui->widget->width()) >= mousePos.x()
			&& (winPos.y() + ui->widget->height()) >= mousePos.y())
		{
			m_firstPos = pEvent->globalPos() - pos();
			m_mouseClicked = true;
		}	
	}
	
	QDialog::mousePressEvent(pEvent);
}

void MessageDialog::mouseReleaseEvent(QMouseEvent* pEvent)
{
	if (pEvent->button() == Qt::LeftButton)
		m_mouseClicked = false;

	QDialog::mouseReleaseEvent(pEvent);
}

void MessageDialog::mouseMoveEvent(QMouseEvent* pEvent)
{
	if (m_mouseClicked == true)
	{
		QPoint movePos = pEvent->globalPos();//窗口初始位置
		move(movePos - m_firstPos);
	}
	QDialog::mouseMoveEvent(pEvent);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pailugou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值