QGraphicsView滚动问题

时间:2011-03-24 07:40:53

标签: c++ qt qt4 scroll

我在这里有以下情况:我在一个图形场景中绘制一种中央小部件,有时这也涉及滚动场景。然后,用户单击应用程序中的其他位置,中央窗口小部件将更改为其他内容(并且图形视图的滚动条位置将保存在某处)。现在,用户想要点击返回图形场景,我重绘场景(通过重新创建整个图形视图窗口,因为当用户在图形场景之外时,他改变了一些必须在图形视图中更改的值) ,当我想设置前面的滚动位置时,我调用以下方法:

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 个答案:

答案 0 :(得分:4)

如果用户编辑后场景矩形发生变化,则保存的滚动位置将不再有效,因为新的最小值/最大值现在不同。

接收场景可能是更好的解决方案:

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