如何使用QGraphicsView的translate()函数?

时间:2013-01-30 17:56:00

标签: qt translate qgraphicsview

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

view->translate(10, 10);

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

4 个答案:

答案 0 :(得分:2)

中心

正如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 );

答案 1 :(得分:0)

答案 2 :(得分:0)

我使用了以下解决方法:

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

答案 3 :(得分:0)

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

setTransformationAnchor(QGraphicsView::NoAnchor);

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