QGraphicsView实现简易地图12『平移与偏移』

前文链接:QGraphicsView实现简易地图11『指定层级-定位坐标』
提供地图平移与偏移功能。地图平移是指将地图的中心点更改为给定的点,即移动地图到指定位置。地图偏移是指将当前视口内的地图向上/下/左/右/进行微调,这里偏移视口宽/高的四分之一。
1、动态演示效果
在这里插入图片描述

2、平移与偏移代码

void WHMapView::panTo(const QPointF &geoCenter)
{
	m_geoCoord = GeoCoord(geoCenter.x(), geoCenter.y());

	// 经纬度坐标转场景坐标、视图定位到中心点
	QPointF offsetPos = QPointF(viewport()->width() / 2.0, viewport()->height() / 2.0);
	QPointF scenePos = MapUtility::sceneCoordFromGeoCoord(m_geoCoord, m_curLevel);
	horizontalScrollBar()->setValue(scenePos.x() - offsetPos.x());
	verticalScrollBar()->setValue(scenePos.y() - offsetPos.y());

	moveScene();
	emit geoCoordChanged(m_geoCoord);
}

void WHMapView::panTop()
{
	double offsetValue = 4.0;
	QPointF scenePos = mapToScene(viewport()->width() / 2.0, viewport()->height() / offsetValue);
	m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel);
	verticalScrollBar()->setValue(verticalScrollBar()->value() + viewport()->height() / offsetValue);

	moveScene();
	emit geoCoordChanged(m_geoCoord);
}

void WHMapView::panBottom()
{
	double offsetValue = 4.0;
	QPointF scenePos = mapToScene(viewport()->width() / 2.0, viewport()->height() / offsetValue);
	m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel);
	verticalScrollBar()->setValue(verticalScrollBar()->value() - viewport()->height() / offsetValue);

	moveScene();
	emit geoCoordChanged(m_geoCoord);
}

void WHMapView::panLeft()
{
	double offsetValue = 4.0;
	QPointF scenePos = mapToScene(viewport()->width() / offsetValue, viewport()->height() / 2.0);
	m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel);
	horizontalScrollBar()->setValue(horizontalScrollBar()->value() + viewport()->width() / offsetValue);

	moveScene();
	emit geoCoordChanged(m_geoCoord);
}

void WHMapView::panRight()
{
	int offsetValue = 4;
	QPointF scenePos = mapToScene(viewport()->width() / offsetValue, viewport()->height() / 2);
	m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel);
	horizontalScrollBar()->setValue(horizontalScrollBar()->value() - viewport()->width() / offsetValue);

	moveScene();
	emit geoCoordChanged(m_geoCoord);
}
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浮生卍流年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值