Qt 如何使用QGraphicsView';s translate()函数?

Qt 如何使用QGraphicsView';s translate()函数?,qt,translate,qgraphicsview,Qt,Translate,Qgraphicsview,这里我有一个场景和一个关联的视图,然后我在场景坐标中有一个位置。我想用这个位置设置视口的中心。我该怎么做?我尝试使用translate()函数,但它不起作用 view->translate(10, 10); 视口应该随增量x 10和增量y 10一起移动,但它不起作用 请参阅 居中 如上所述,要将视口居中于给定位置,只需使用该函数即可 翻译 但要转换视口,存在另一种方法,包括更改滚动条位置: // Your graphics view QGraphicsView *view; // dx

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

view->translate(10, 10);
视口应该随增量x 10和增量y 10一起移动,但它不起作用

请参阅

居中 如上所述,要将视口居中于给定位置,只需使用该函数即可

翻译 但要转换视口,存在另一种方法,包括更改滚动条位置:

// 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 );

我使用了以下解决方法:

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可能与较新版本有所不同。

您需要将图形视图的转换定位模式设置为NoAnchor

setTransformationAnchor(QGraphicsView::NoAnchor);

这将防止图形视图按照其他定位模式(AnchorViewCenter、AnchorUnderMouse)的预期撤消平移。

使用QGraphicsView::centerOn进行居中。翻译到底有什么不起作用?当前视口位置和场景的尺寸是多少(scen直立())?我看到了同样的情况。我可以设置转换后的
QTransform
,也可以使用
QGraphicsView::translate()
,但什么都不会发生。有点令人沮丧。在你的答案中总结从链接中得出的结论是很有帮助的。