如何将QGraphicsView锚定到场景中的特殊点?
我希望视图的中心锚定到场景点(0,0)。
但正如文件中所述:
如果整个场景都可见 视图,(即没有可见的 滚动条,)视图的对齐方式 将决定场景的位置 在视图中呈现。
如果我将设置设置为Qt :: AlignCenter 视图将锚定到场景中心。
可以吗?
我需要像QGraphicsView :: centerOn这样的东西,它始终将点放在视图中心。
答案 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
来实现此目的。