2010-10-26 49 views
1

如何将QGraphicsView定位到场景上的特殊点?如何将QGraphicsView锚定到场景上的特殊点?

我想要一个视图的中心锚固到场景点(0,0)。

但随着docummentation说:

如果整个场景是在 视图中可以看到,(即,没有可见的 滚动条)视图的对齐 将决定在何处场面会在视图中呈现的 。

如果我设置agn​​ment Qt的:: AlignCenter 视图成为固定在现场中心。

是否可行?

我需要类似QGraphicsView :: centerOn的东西,它始终将视点置于视图中心。

回答

-1

您可以设置alignment property来实现此目的。

+0

使用AlignmentCenter,整个场景将在视图中居中。但不是特别的一点。 – graphite 2010-10-26 10:59:18

+0

当你谈论特殊点时,你是在谈论场景中的QGraphicsItem点?就我而言,视图不可能管理场景中的对象。 – 2010-10-26 13:39:00

+0

尝试使用setVerticalScrollBarPolicy(Qt :: ScrollBarAlwaysOff)关闭滚动条,水平方向也一样。如果仍有问题,请尝试确保场景始终大于视图区域。 – 2010-10-26 15:58:47

6

您可以通过定义(“强制”)其sceneRect属性,除了默认的(即QGraphicsScene边界矩形)在特定位置的的QGraphicsView。

http://qt-project.org/doc/qt-4.8/qgraphicsview.html#sceneRect-prop

下面是一个代码的例子。 视图以点(0,0)为中心,不包括边界矩形场景或centerOn函数。

#include <QGraphicsView> 
#include <QGraphicsScene> 
#include <QGraphicsRectItem> 
#include <QGraphicsEllipseItem> 
#include <QDebug> 

//... 

QGraphicsScene scene; 
QGraphicsView view(&scene); 

QRect viewRect(-100, -100, 200, 200); 
view.setSceneRect(viewRect); 
qDebug() << viewRect.center(); //QPointF(0,0) 

scene.addEllipse(-5,-5,10,10); 
qDebug() << scene.sceneRect(); //QRectF(-5,-5 10x10) 
scene.addRect(QRectF(0, 0, 200, 200)); 
qDebug() << scene.sceneRect(); //QRectF(-5,-5 205x205) 

view.show(); 

view.centerOn(QPointF(50, 50)); //nothing happens! 

这应该是诀窍。

相关问题