2013-10-28 11 views
5

Dlaczego to:QGraphicsView fitInView marże

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

nie działa zgodnie z oczekiwaniami? Nie pasuje on do sceny rect poprawnie, pokazując marginesy wokół niej.

+3

Dodaj przykład kodu minimalnego i zrzut ekranu oraz sposób, w jaki różni się on od oczekiwanego. –

Odpowiedz

2

Wyjaśniałem, na czym polegał problem, opisano go w this question. Główną przyczyną problemu jest to, że nie powinieneś wywoływać metody fitInView przed wyświetleniem formularza.

+0

właściwie to zależy dokładnie od tego, co masz na myśli, po prostu marginesy, jak przypuszczam, ponieważ również zadałeś pytanie, jakie mogły być te ogromne w pytaniu, które łączyłeś. Niezależnie od tego możesz zadzwonić do FitInView, wszystko, co chcesz, zanim pojawi się formularz. –

0

Z dokumentacji: -

rect musi być wewnątrz rect sceny; w przeciwnym razie fitInView() nie może zagwarantować, że cały rect jest widoczny.

także ...

rect będzie wyśrodkowany w widoku jeśli nie pasuje ciasno.

Wreszcie

Jeśli rect jest pusta, czy rzutnia jest zbyt mała, funkcja ta nie zrobi nic.

3

Przyczyna jest następująca: https://bugreports.qt.io/browse/QTBUG-42331 - proszę zagłosuj na nią na trackerze błędów qt, aby zwiększyć jego priorytet.

W skrócie, fitInView ma zakodowane na stałe marginesy, co może powodować wszelkiego rodzaju spustoszenie - najmniejsze z nich powoduje utratę kilku pikseli obszaru wyświetlania i może również wymuszać niepotrzebne przeskalowywanie.

Możesz rozwiązać ten problem, ponownie wdrażając funkcję fitInView, na podstawie istniejącej implementacji, ale usuwając niedorzeczne marginesy. Przykładem, który jest dostępny tutaj w Pythonie, na podstawie oryginalnej wersji C++:

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

Powiązane problemy