首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QGraphicsView的translate()函数?

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

Stack Overflow用户
提问于 2013-01-31 01:56:00
回答 4查看 6.1K关注 0票数 12

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

代码语言:javascript
复制
view->translate(10, 10);

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

EN

回答 4

Stack Overflow用户

发布于 2019-04-28 06:54:51

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

代码语言:javascript
复制
setTransformationAnchor(QGraphicsView::NoAnchor);

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

票数 5
EN

Stack Overflow用户

发布于 2017-07-31 21:11:24

居中

正如Frank Osterfeld所说,要使视口居中于给定位置,只需使用函数centerOn即可。

翻译

但是为了平移你的视区,它有另一种方式来改变你的滚动条位置:

代码语言:javascript
复制
// 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 );

渲染

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

代码语言:javascript
复制
// Hide the scrollbars
view->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
view->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
票数 3
EN

Stack Overflow用户

发布于 2018-03-29 20:01:01

我使用了以下解决方法:

代码语言:javascript
复制
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,可能与较新的版本不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14610568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档