2013-10-28 13 views
5

Perchè questo:margini QGraphicsView fitInView

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

non funziona come previsto? Non si adatta correttamente la scena rect, mostrando margini attorno ad essa.

+3

Aggiungi un esempio di codice minimo e uno screenshot e come differisce da quello che ti aspetti. –

risposta

2

Ho scoperto qual era il problema, è descritto in this question. La causa principale del problema è che non si dovrebbe chiamare fitInView prima che venga visualizzato il modulo.

+0

in realtà dipende esattamente da cosa intendi con i margini, suppongo che, visto che hai anche posto la domanda, potrebbero essere stati questi enormi nella domanda che hai collegato. Indipendentemente da ciò, è possibile chiamare fitInView tutto ciò che si desidera prima che venga visualizzato il modulo. –

0

Dalla documentazione: -

rect deve essere all'interno della scena rect; in caso contrario, fitInView() non può garantire che l'intero rect sia visibile.

anche ...

rect sarà centrato nella vista se non si adatta perfettamente.

Infine

Se rect è vuoto, o se la finestra è troppo piccola, questa funzione farà nulla.

3

La causa è questa: https://bugreports.qt.io/browse/QTBUG-42331 - si prega di votare su qt bug tracker per aumentare la priorità.

In breve, fitInView ha margini codificati e questo può causare tutti i tipi di caos - il minimo dei quali è che ora si perdono alcuni pixel dell'area di visualizzazione e si potrebbe anche forzare il ridimensionamento non necessario.

È possibile risolvere il problema reimplementando fitInView, in base all'implementazione esistente ma rimuovendo i suoi ridicoli margini. Un esempio di ciò è disponibile qui in pitone, in base alla versione originale C++:

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