2011-09-24 6 views
1

QGraphicsView를 통해 보았을 때 어떻게 꺾임 모서리를 가져 와서 크기를 조정할 때 어떻게 유지할 수 있습니까?Qt QGraphicsView는 스케일 원점으로 topleft를 사용합니다.

스케일링하는 동안 맨 앞의 구석에 'A'기호가 있으면 A가 아직 저울에 머무를 것입니다. 현재 화면의 중심은 스케일의 원점으로 간주됩니다. 그러나 나는 번영의 구석을 변화의 원점으로 삼고 싶습니다.

즉, 전체 그래픽 장면이 아닌 그래픽보기에서 보이는 것과 같습니다. 어떻게하면됩니까?

void GraphicsView::resizeEvent(QResizeEvent *event) 
{ 
    QGraphicsView::resizeEvent(event); 

    double scale_delta = (double) event->size().width()/scene()->width(); 
    resetMatrix(); 

    scale(scale_delta, scale_delta); 
} 

솔루션

void GraphicsView::resizeEvent(QResizeEvent *event) 
{ 
    QGraphicsView::resizeEvent(event); 

    if (!first_shown) 
    { 
     centerOn(0, 0); 
     first_shown = true; 
    } 

    QPointF topleft = mapToScene(viewport()->rect().topLeft()); 

    resetMatrix(); 

    QPointF shift = (mapToScene(viewport()->rect().bottomRight() + QPoint(1, 1)) - mapToScene(viewport()->rect().topLeft())); 
    shift /= (double) event->size().width()/scene()->width(); 

    fitInView(QRectF(topleft, topleft + shift)); 
} 
+0

번역 그런 규모

  • 를 적용하고 당신으로는 A를 확장하지 말하자면 - 나는 당신이 실제로 원하는 것을 해결하기 위해 고심하고 있습니다. A를 고정 된 크기로 유지 하시겠습니까? –

  • 답변

    0

    내가 제대로 질문을 이해한다면, 기본 단계 :

    이 그것의 100 %에서 장면을 확장 할 수있는 내 규모의 코드는 뷰포트의 폭입니다 당신은 필요합니다 :

    1. Qt의 출처에 대한 생각을 어디로 번역합니까? 주위 즉, 크기를 조정할 왼쪽 상단
    2. 가 그럼 난 당신의 코드로, 작은 예제를 만들었 다시
    +0

    예, 올바른 기능을 호출하고 올바른 매개 변수를 전달하는 데 시간이 걸렸지 만 정확했습니다. –

    관련 문제