2013-07-18 20 views
5

Ho reimplementato QGraphicsView per ingrandire la scena con un evento rotellina del mouse. La scena contiene diversi QGraphicsPixmapItem. L'evento ruota chiama QGraphicsView :: scale (qreal sx, qreal sy)Antialiasing non funziona in QGraphicsView

Tutto funziona perfettamente ma il rendering. Mentre faccio lo zoom indietro (la scena diventa più piccola), appare l'aliasing. Ho provato a installare i suggerimenti rendering come segue nella re-implementato QGraphicsView costruttore:

ImageViewer::ImageViewer(QWidget * parent) : 
    QGraphicsView(parent) 
{ 
    setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::HighQualityAntialiasing); 
} 

continuo a vedere questi artefatti. Come posso liberarmi di questo ?

+0

Puoi pubblicare uno screenshot di cosa sta succedendo? Stai impostando una strategia di caching sugli articoli? – peppe

+0

Grazie @peppe! Non sto impostando nulla sulla memorizzazione nella cache, quindi suppongo che sia l'impostazione predefinita. Ecco un esempio di come appare [prima] (https://lh6.googleusercontent.com/-e2pH06jhy94/Ue09l8A1SWI/AAAAAAAAAY08/YGa-wj9ollY/w958-h599-no/Fullscreen+capture+7222013+100003+AM.jpg) (Rapporto 1: 1 pixel) e [successivo] (https://lh4.googleusercontent.com/-PZJVX0jl6yw/Ue09mo_Iu2I/AAAAAAAAY1E/nMf28uA9MlE/w958-h599-no/Fullscreen+capture+7222013+100007+AM.jpg) (meno di 1: 1 pixel ratio) che rimpicciolisce. Vedrai qualche aliasing nei cerchi concentrici. – Algo

risposta

3

Vedere i miei commenti per this question.

Fondamentalmente è necessario chiamare setTransformationMode(Qt::SmoothTransformation) su QGraphicsItem s a cui si desidera applicare l'anti-aliasing.

Chiamare lo setRenderHints sulla vista non ha funzionato neanche per me.

+0

Quindi non c'è modo di avere uno sfondo antialiased? Modifica: Nm era un errore nel mio codice. – Timmmm