QT实现窗口可拖动

2 篇文章 0 订阅

QT实现窗口可拖动


QT实现窗口可拖动需要在窗口类中重写以下三个函数:

virtual void mousePressEvent(QMouseEvent* event);
virtual void mouseMoveEvent(QMouseEvent* event);
virtual void mouseReleaseEvent(QMouseEvent* event);

同时定义以下三个类属性用于窗口拖动判断和位置偏移计算:

bool m_bDragging;			// 是否正在拖动
QPoint m_poStartPosition;	// 拖动开始前的鼠标位置
QPoint m_poFramePosition;	// 窗体的原始位置

在构造函数内初始化变量m_bDradding = false
重写上面的三个函数:

//窗口可拖动
void SecurityUI::mousePressEvent(QMouseEvent* event)
{
	if (event->button() == Qt::LeftButton)
	{
		QRect rect = ui.widget->rect();  //rect是鼠标实现可拖动的区域
		rect.setBottom(rect.top() + 220);
		if (rect.contains(event->pos()))
		{
			m_bDragging = true;
			m_poStartPosition = event->globalPos();
			m_poFramePosition = frameGeometry().topLeft();
		}	
	}
	QWidget::mousePressEvent(event);
}

void SecurityUI::mouseMoveEvent(QMouseEvent* event)
{
	if (event->buttons() & Qt::LeftButton)	//只响应鼠标所见
	{
		if (m_bDragging)
		{
			// delta 相对偏移量, 
			QPoint delta = event->globalPos() - m_poStartPosition;
			// 新位置:窗体原始位置  + 偏移量
			move(m_poFramePosition + delta);
		}
	}
	QWidget::mouseMoveEvent(event);
}

void SecurityUI::mouseReleaseEvent(QMouseEvent* event)
{
	m_bDragging = false;
	QWidget::mouseReleaseEvent(event);
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值