最近做项目需要用到Qt图形框架QGraphicsView,据说这个框架很强大,但是具体流畅性没有测试过,不过对于我的项目来说应该足够了。
关于拖拽平移的问题经过一系列爬贴与研究终于搞定了,整理记录并分享一下。
一、 通过centerOn()方法
网上大部分教程都是通过这种方式对view进行拖拽平移的, 代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
if (m_bMouseTranslate){
QPointF mouseDelta = mapToScene(event->pos()) - mapToScene(m_lastMousePos);
// 根据当前 zoom 缩放平移数
delta *= m_scale;
delta *= m_translateSpeed;
// view 根据鼠标下的点作为锚点来定位 scene
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
QPoint newCenter(VIEW_WIDTH / 2 - delta.x(), VIEW_HEIGHT / 2 - delta.y());
centerOn(mapToScene(newCenter));
// scene 在 view 的中心点作为锚点
setTransformationAnchor(QGraphicsView::AnchorViewCenter);
}
QGraphicsView::mouseMoveEvent(event);
}
效果:
这种方式能够平移拖拽但是必须是放大后才可以,我想要的效果是任何时候都可以,就类似于view无限大。
二、通过transform()方法
1 | void MyGraphicsView::mouseMoveEvent(QMouseEvent *event) |
效果如下: