Qt 實現鼠標拖拽窗口移動

在Qt中實現鼠標拖動窗口可以分爲三個步驟來做:

  1. 鼠標在窗口按下左鍵時,獲取到當前鼠標的位置,並且計算offset,即鼠標當前位置減去窗口左上角座標;
  2. 鼠標移動時,因爲是單擊鼠標,所以會一直執行第一步,獲取到offset,這裏就調用move函數移動窗口;
  3. 最後鼠標釋放時,將標誌位置爲false;
void MainWindow::eventFilter(QObject *obj, QEvent *event)
{
	if (this == obj->parent())
	{
		switch (event->type()){
		case QEvent::MouseButtonPress:
		{
			auto e = static_cast<QMouseEvent*>(event);
			if (e->button() == Qt::LeftButton)
			{	
				//m_isDrag寫做成員變量,初始值置false
				m_isDrag = true;

				//用e->globalPos()代替e->pos()爲了防止窗口抖動
				m_offsetPoint = e->globalPos() - this->frameGeometry().topLeft();	
			}
			event->accept();
		}
		case QEvent::MouseMove:
		{
			auto e = static_cast<QMouseEvent*>(event);
			if (m_isDrag)
			{
				this->move(e->globalPos() - m_offsetPoint);
			}
			event->accept();
		}
		case QEvent::MouseButtonRelease:
		{
			auto e = static_cast<QMouseEvent*>(event);
			if (e->button() == Qt:LeftButton)
			{
				m_isDrag = false;
			}
		}
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章