Проблема прокрутки QGraphicsView - PullRequest
2 голосов
/ 24 марта 2011

У меня следующая ситуация: я рисую на графической сцене, в одном типе центрального виджета, и иногда это также включает прокрутку сцены. Затем пользователь щелкает в другом месте приложения, центральный виджет изменяется на что-то другое (и позиции полосы прокрутки графических представлений сохраняются где-то). Теперь пользователь хочет вернуться обратно к графической сцене, я перерисовываю сцену (воссоздавая все окно графического представления, потому что, когда пользователь находился за пределами графической сцены, он изменял некоторые значения, которые также должны быть изменены в графическом представлении) и когда я хочу установить предыдущие позиции прокрутки, я вызываю следующий метод:

void GraphicsForm::scrollTo(int hor, int ver)
{
    m_qgv->horizontalScrollBar()->setValue(hor);
    m_qgv->verticalScrollBar()->setSliderPosition(ver);
}

и это должно изменить положение полосы прокрутки на предыдущие значения (hor, ver), сохраненные до того, как я изменил представление (m_qgv - это объект QGraphicsView).

Проблема в том, что ни горизонтальные, ни вертикальные значения не возвращаются правильно (они правильно сохраняются с помощью horizontal/verticalScrollBar()->sliderPosition() перед тем, как скрыть сцену), поэтому полосы прокрутки не перемещаются так, как они были до окна меняются, они двигаются намного меньше ...

Любые идеи, предложения, как я могу вернуться к предыдущим координатам прокрутки?

1 Ответ

4 голосов
/ 24 марта 2011

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

Повторное центрирование сцены может быть лучшим решением:

QPointF center = my_qgv->viewPort().rect().center();
center = my_qgv->mapToScene(center);
...
// user edit; reconstruct scene
//
my_qgv->centerOn(center);
...