我在这里有以下情况:我在一个图形场景中绘制一种中央小部件,有时这也涉及滚动场景。然后,用户单击应用程序中的其他位置,中央窗口小部件将更改为其他内容(并且图形视图的滚动条位置将保存在某处)。现在,用户想要点击返回图形场景,我重绘场景(通过重新创建整个图形视图窗口,因为当用户在图形场景之外时,他改变了一些必须在图形视图中更改的值) ,当我想设置前面的滚动位置时,我调用以下方法:
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()
正确保存它们),因此滚动条不会像它们那样移动得多在窗口改变之前,它们移动得更少......
任何想法,建议如何恢复到之前的滚动坐标?
答案 0 :(得分:4)
如果用户编辑后场景矩形发生变化,则保存的滚动位置将不再有效,因为新的最小值/最大值现在不同。
接收场景可能是更好的解决方案:
QPointF center = my_qgv->viewPort().rect().center();
center = my_qgv->mapToScene(center);
...
// user edit; reconstruct scene
//
my_qgv->centerOn(center);