天天看點

Qt父子視窗之間的坐标系轉換

Qt父子視窗之間的坐标系轉換

基礎知識:

QMyLabel m_label;//關系1:m_label有自己的父視窗,假設為m_widget;
QPoint posChild(0,0);//此點坐标在m_label坐标系中 關系2:m_label是posChild的父視窗
QPoint posParent=m_label->mapToParent(posChild);//得到的posParent是posChild在m_widget中的坐标
上面的函數可以了解為:posParent=posChild+m_label在m_widget中的坐标值

m_label->move(QPoint point);  point是m_label父視窗坐标系中的坐标值
           

應用:

void QMyLabel ::mousePressEvent(QMouseEvent *event)
{
	if (event->button() == Qt::LeftButton)
	{
		this->raise();
		this->m_pressPoint = event->pos();
	}
}
void QMyLabel ::mouseMoveEvent(QMouseEvent *event)
{
	if (event->buttons() == Qt::LeftButton)
	{
		this->move(this->mapToParent(event->pos() - this->m_pressPoint));
	}
}
           

此例需求為實作MyLabel在父視窗中的拖動,如果需要在MyLabel中實作自身的移動,必須對坐标進行轉換才能在move()函數中使用。event->pos() - this->m_pressPoint是滑鼠拖動移動的大小,this在其父視窗中的坐标值為滑鼠拖動的大小+this在它父視窗中的坐标值,即move()函數中需要的的參數。

Qt

繼續閱讀