2010-10-26 2 views
1

Как привязать QGraphicsView к специальной точке на сцене?Как привязать QGraphicsView к специальной точке на сцене?

Я хочу центр зрения прикрепляются к сцене точке (0,0).

Но, как сказал в docummentation:

Если вся сцена видима в зрения (т.е. нет видимых полосы прокрутки) выравнивание вида по будет решать, где сцена будет визуализации в представлении.

И если я устанавливаю agnment в Qt :: AlignCenter вид становится на якорь на сцены центра.

Возможно ли?

Мне нужно что-то вроде QGraphicsView :: centerOn, которое всегда помещает точку в центр просмотра.

ответ

-1

Для достижения этой цели вы можете установить alignment property.

+0

С центром выравнивания вся сцена будет центрирована в представлении. Но не какой-то особый момент. – graphite

+0

Когда вы говорите о специальной точке, вы говорите о точках QGraphicsItem в сцене? Насколько мне известно, для представления объектов внутри сцены невозможно. –

+0

Попробуйте отключить полосы прокрутки, используя setVerticalScrollBarPolicy (Qt :: ScrollBarAlwaysOff) и то же самое для горизонтального. Если у вас все еще есть проблемы, попробуйте убедиться, что сцена всегда больше, чем область просмотра. –

6

Вы можете якорь QGraphicsView в определенном положении, определяя («принуждение») его sceneRect собственность, кроме установленного по умолчанию (то есть QGraphicsScene ограничивающего прямоугольника).

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! 

Это должно сделать трюк.

Смежные вопросы