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

时间:2010-10-26 10:45:10

标签: qt qt4

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

我希望视图的中心锚定到场景点(0,0)。

但正如文件中所述:

  

如果整个场景都可见   视图,(即没有可见的   滚动条,)视图的对齐方式   将决定场景的位置   在视图中呈现。

如果我将设置设置为Qt :: AlignCenter 视图将锚定到场景中心。

可以吗?

我需要像QGraphicsView :: centerOn这样的东西,它始终将点放在视图中心。

2 个答案:

答案 0 :(得分:7)

您可以通过定义(“强制”)其 sceneRect 属性来锚定一个特定位置的QGraphicsView,而不是默认属性(即QGraphicsScene边界矩形)。< / p>

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!

这应该可以解决问题。

答案 1 :(得分:-1)

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