2011-03-24 5 views
0

여기에 다음과 같은 상황이 있습니다. 그래픽 씬에서 한 가지 유형의 중앙 위젯에서 드로잉을하고, 때로는 장면 스크롤과 관련된 경우도 있습니다. 그런 다음 사용자가 응용 프로그램의 다른 곳을 클릭하면 중앙 위젯이 다른 것으로 변경됩니다 (그래픽보기의 스크롤 막대 위치가 어딘가에 저장됩니다). 이제 사용자는 그래픽 장면으로 다시 돌아가고 싶습니다. 전체 그래픽보기 창을 다시 만들어서 장면을 다시 그립니다. 사용자가 그래픽 장면 외부에있을 때 그래픽보기에서 변경해야하는 일부 값을 변경했기 때문입니다. 내가보기를 변경하기 전에 (저장 (버전, HOR)QGraphicsView 스크롤 문제

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

이는 이전 값으로 스크롤 막대의 위치를 ​​변경하도록되어 : 나는 이전 스크롤 위치를 설정하려는 경우, 그리고, 나는 다음과 같은 메소드를 호출 m_qgv는 QGraphicsView 객체입니다.)

수평 또는 수직 값이 올바르게 되돌려지지 않습니다 (장면을 숨기기 전에 horizontal/verticalScrollBar()->sliderPosition()을 사용하여 올바르게 저장 됨). 따라서 스크롤 막대가 창보다 이전으로 이동하지 않습니다. 변경, 그들은 훨씬 더 적은 이동 ...

어떤 아이디어, 제안 어떻게 이전의 스크롤 좌표로 되돌릴 수 있습니까?

답변

2

사용자 편집 후에 장면 rect가 변경되면 새로운 최소/최대가 이제 다르기 때문에 저장된 스크롤 위치가 더 이상 유효하지 않습니다. : 당신에게 주인을 감사

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

작품 :

장면을 가운데로하여 더 나은 해결책이 될 수 있습니다 – fritzone