首页 > 解决方案 > 如何移动 QGraphicsView 的内容?

问题描述

我正在尝试在 Qt 中为我的 QGraphicsView 实现缩放系统。但是,我不想使用QGraphicsView::scale(),因为我只想缩放某些项目。当我放大时,一切看起来都很好(我的意思是元素位于视图的中心)。但是,当我缩小时,所有内容都固定在左上角。我可以放大,它最终会回到中心,但是当我再次缩小时,它仍然被锚定。这是我的意思的说明:

放大和缩小
编辑:这就是鼠标滚动现在发生的事情。

这是我目前在鼠标滚动上所做的:

for (int y = 0; y < canvasSize[0]; i++)
{
    for (int x = 0; x < canvasSize[1]; j++)
    {
        pixels[y][x]->setRect(y*zoomLevel, x*zoomLevel, zoomLevel, zoomLevel); // Scaling the items
    }
}
QPointF delta = target_viewport_pos - mouse_event->pos();
if (qAbs(delta.x()) > 5 || qAbs(delta.y()) > 5) {
    target_viewport_pos = mouse_event->pos();
    target_scene_pos = _view->mapToScene(mouse_event->pos());
}
_view->centerOn(target_scene_pos);
QPointF delta_viewport_pos = target_viewport_pos - QPointF(_view->viewport()->width() / 2.0,
                                                           _view->viewport()->height() / 2.0);
QPointF viewport_center = _view->mapFromScene(target_scene_pos) - delta_viewport_pos;
_view->centerOn(_view->mapToScene(viewport_center.toPoint()));

移动视图的代码(我承认不是我自己编写的)在我使用时运行良好,QGraphicsView::scale()但是当我使用自定义缩放时,它什么也不做。为什么它不起作用?

标签: c++qtqgraphicsview

解决方案


推荐阅读