graphite
graphite

Reputation: 2960

How to anchor QGraphicsView to a special point on a scene?

How to anchor QGraphicsView to a special point on a scene?

I want a center of a view is anchored to the scene point (0,0).

But as said in docummentation:

If the whole scene is visible in the view, (i.e., there are no visible scroll bars,) the view's alignment will decide where the scene will be rendered in the view.

And if I set agnment to Qt::AlignCenter view becomes anchored to the scene center.

Is it possibe to do?

I need something like QGraphicsView::centerOn that always put the point in to the view center.

Upvotes: 3

Views: 9742

Answers (2)

Gabriel C. Stabel
Gabriel C. Stabel

Reputation: 601

You can anchor a QGraphicsView at a specific position by defining ("forcing") its sceneRect property, other than the default one (i.e. QGraphicsScene bounding rectangle).

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

Here is a code example. The view is centered at point(0,0), no mather the bounding rect scene or centerOn function.

#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!

This should do the trick.

Upvotes: 10

Patrice Bernassola
Patrice Bernassola

Reputation: 14446

You can set the alignment property to achieve this.

Upvotes: -1

Related Questions