12

在这里我有一个场景和一个关联的视图,然后我在场景坐标中有一个位置。我想用位置设置视口的中心。我该怎么做?我尝试使用 translate() 函数,但它不起作用?

view->translate(10, 10);

视口应该随着 delta x 10 和 delta y 10 移动,但它不起作用!

4

4 回答 4

5

您需要将图形视图的变换锚点模式设置为 NoAnchor。

setTransformationAnchor(QGraphicsView::NoAnchor);

这可以防止图形视图按照其他锚模式(AnchorViewCenter、AnchorUnderMouse)的预期撤消转换。

于 2019-04-27T22:54:51.480 回答
3

中心

正如Frank Osterfeld所说,要将视口居中在给定位置,您可以简单地使用功能centerOn

翻译

但是为了翻译你的视口,它存在另一种方式,包括改变你的滚动条位置:

// Your graphics view
QGraphicsView *view;

// dx, dy corresponds to your translation
int dx, dy;

// Change scrollbars position
view->horizontalScrollBar()->setValue( view->horizontalScrollBar()->value() + dx );
view->verticalScrollBar()->setValue( view->verticalScrollBar()->value() + dy );

使成为

如果需要,您还可以隐藏滚动条:

// Hide the scrollbars
view->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
view->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
于 2017-07-31T13:11:24.377 回答
2

我使用了以下解决方法:

QTransform old_transform = transform();

QRectF scene_rect = scene()->sceneRect();
QRectF new_scene_rect(scene_rect.x()-translation.x(),
                      scene_rect.y()-translation.y(),
                      scene_rect.width(),scene_rect.height());
scene()->setSceneRect(new_scene_rect);

setTransform(old_transform);

变换部分是必要的,否则它会重置缩放。

这个解决方案本质上是在强制它改变它允许查看的位置,这远非优雅。

我希望其他人提出一个清晰的答案,允许translate按预期实际使用该方法。

请注意,我使用的是 Qt 4.85,可能与较新的版本不同。

于 2018-03-29T12:01:00.730 回答
0

请参阅错误报告以及解决方法

于 2013-09-21T18:21:43.717 回答