2016-11-10 13 views
0

У меня есть класс, полученный от QGraphicsItem. Он содержит вектор точек которым я рисую в краске:Позиция QGraphicsItem после изменения boundingRect

for(int i = 0; i < _vertexes.size(); i++) 
{ 
    ... 
    painter->drawEllipse(_vertexes[i], POINT_RADIUS, POINT_RADIUS); 
} 

, когда я добавить точку в _vertexes с этим кодом

prepareGeometryChange(); 
_vertexes.pop_back(); 

положения точек зрения меняется, boundingRect рассчитываются с использованием _vertexes

Как сохранить позиции позиций? Я не хочу, чтобы все точки меняли позицию после добавления нового, если новый boundingRect больше. По pos() всегда возвращается одно и то же положение (0, 0), но оно может находиться в другом положении экрана.

+1

Звучит так, как будто QGraphicsScene' прокручивается внутри 'QGraphicsView', когда ограничивающий прямоугольник изменяется, а не элемент, фактически меняющий положение. Попробуйте установить сцену rect ['явно] (http://doc.qt.io/qt-5/qgraphicsview.html#sceneRect-prop). –

+0

Спасибо, настройка sceneRect помогает мне решить проблему –

ответ

1

Я не устанавливаю начальную сценуRect, поэтому она была пересчитана и прокручена после каждого возрастающего объекта сцены, ограничивающего прямоугольник. Устанавливать сцену rect на ui->graphicsView->setSceneRect(x, y, width, heigh); перед добавлением моих предметов решает проблему,