2013-10-28 3 views
5

왜이 예상대로를 QGraphicsView fitInView 마진

graphics_view->fitInView(scene->sceneRect(), Qt::KeepAspectRatio); 

가 작동하지 않는 이유는 무엇입니까? 장면 렉을 올바르게 맞추지 못하고 주변에 여백이 표시됩니다. 문서에서

+3

최소한의 코드 예제와 스크린 샷, 그리고 예상과 다른 점을 추가하십시오. –

답변

2

문제가 무엇인지 알아 냈는데, this question에 설명되어 있습니다. 문제의 주 원인은 양식이 표시되기 전에 fitInView를 호출하면 안됩니다.

+0

실제로 그것은 마진이 정확히 무엇을 의미하는지에 달려 있습니다. 질문을 한 후에도 당신이 링크 한 질문에서이 거대한 질문을했을 수도 있습니다. 그럼에도 불구하고 양식이 표시되기 전에 원하는 모든 것을 fitInView라고 부를 수 있습니다. –

0

: -

RECT이 장면 RECT 안에 있어야합니다; 그렇지 않으면 fitInView()가 rect 전체가 표시되는지 여부를 보장 할 수 없습니다. 또한

... 그것은 단단히 맞지 않으면

RECT 뷰의 중심 될 것입니다.

마지막으로

RECT가 비어 있거나 뷰포트가 너무 작은 경우,이 함수는 아무것도하지 않습니다.

3

원인은 다음과 같습니다. https://bugreports.qt.io/browse/QTBUG-42331 - qt 버그 추적기에서 우선 순위를 위해 투표하십시오.

간단히 말해서 fitInView는 여백을 하드 코드하여 모든 종류의 혼란을 야기 할 수 있습니다. 그 중 가장 작은 것은 표시 영역의 몇 픽셀을 잃어 버리며 불필요한 크기 재조정을 강제 할 수 있습니다.

기존 구현을 기반으로 fitInView를 다시 구현하지만 우스운 여백을 제거하여 문제를 해결할 수 있습니다. 그 예는 원래 C++ 버전을 기반으로, 파이썬 여기에 있습니다 :

https://github.com/nevion/pyqimageview/blob/master/qimageview/widget.py#L276