2010-06-10 17 views

risposta

9

Da the documentation:

è possibile in qualsiasi momento salvare lo stato del QPainter chiamando la funzione save() che salva tutte le impostazioni disponibili su uno stack interno. La funzione restore() li riapre.

Tutte queste impostazioni sono elencate al collegamento indicato. Quindi sta solo salvando le impostazioni della vernice e nulla che sia effettivamente dipinto.

+2

Per elaborare, questo consente di fare cose come, ad esempio: si imposta una penna, si disegna, si salva, si cambia penna, si disegna, si ripristina, si esegue un altro disegno con la penna originale. – Dan

3

Se si utilizza il salvataggio/ripristino molto, è utile avere una piccola classe RAII ("PainterSaver") per assicurarsi che ogni save() (fatto nel ctor) abbia una corrispondente chiamata di restore() (eseguita nel dtor), altrimenti si può incorrere in cattivi "salvataggi/ripristini" sbilanciati.

+0

(vedi QMutexLocker per lo stesso concetto) –

+0

In realtà non risponde alla domanda ma è una buona idea –

8

Come probabilmente stai cambiando il colore e lo stile o qualsiasi altra impostazione del colore, di solito vuoi uscire dalla funzione di disegno con le stesse impostazioni che aveva quando entri. Pertanto, prima di cambiare le impostazioni del pittore, usa QPainter::save()QPainter::restore() dopo aver finito di disegnare con le impostazioni modificate ad es

void paint(QPainter* painter, 
      const QStyleOptionGraphicsItem* option, 
      QWidget* widget = 0) 
{ 
    // Painter has certain settings 
    painter->save(); 
    QPen pen = painter->pen(); 
    pen.setColor(QColor(200,20,20); 
    // Changing settings of painter 
    painter->setPen(pen); 
    // ... Draw 
    painter->restore(); 
    // Painter has same settings as on entry into this function 
} 

painter->save() mette lo stato del pittore su una pila, painter->restore() tira lo stato dalla pila e cambia le impostazioni in modo che corrisponda.

Problemi correlati