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.
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.
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.
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. –
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.
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
można naprawić reimplementing oryginalną metodę fitInView, ale bez włączania marginesów. Sprawdź moje rozwiązanie C++ pod adresem: https://stackoverflow.com/a/42474510/6050364
Dodaj przykład kodu minimalnego i zrzut ekranu oraz sposób, w jaki różni się on od oczekiwanego. –