2010-06-10 12 views
6

No estoy seguro de qué es lo que QPainter hace cuando invoco guardar y restaurar. ¿Está guardando la imagen que está dibujando o está simplemente guardando información como el ancho de la pluma y el color, etc.? ¿Podría usarlo para restaurar la imagen de un evento de pintura anterior?¿Qué hace QPainter :: save() y QPainter :: restore()?

Respuesta

9

De the documentation:

Usted puede en cualquier momento guardar el estado del QPainter llamando a la función save(), que guarda todos los parámetros disponibles en una pila interna. La función restaurar() los devuelve.

Todas esas configuraciones se enumeran en el enlace proporcionado. Entonces, es solo guardar la configuración de pintura y nada de lo que realmente está pintado.

+2

Para elaborar, esto le permite hacer cosas como, por ejemplo: configurar un lápiz, hacer un dibujo, guardar, cambiar el lápiz, hacer un dibujo, restaurar, hacer un poco más de dibujo con el lápiz original. – Dan

3

Si uno usa guardar/restaurar mucho, es bueno tener una pequeña clase RAII ("PainterSaver") para asegurarse de que cada guardado() (hecho en el ctor) tenga una llamada restore() correspondiente (hecho en dtor), de lo contrario, uno puede encontrarse con desagradables errores de "guardar/restaurar no balanceados".

+0

(vea QMutexLocker para el mismo concepto) –

+0

Realmente no responde la pregunta, pero es una buena idea –

8

Como probablemente esté cambiando el color y el estilo o cualquier otra configuración de la pintura, normalmente desea salir de su función de pintura con la misma configuración que tenía al entrar. Por lo tanto, use QPainter::save() antes de un cambio en la configuración del pintor y QPainter::restore() una vez que haya terminado de dibujar con la configuración modificada, por ejemplo

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() pone el estado del pintor en una pila, painter->restore() tira del estado de la pila y cambia la configuración para que coincida.

Cuestiones relacionadas