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
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.
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".
(vea QMutexLocker para el mismo concepto) –
Realmente no responde la pregunta, pero es una buena idea –
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.
- 1. ¿Cómo pinto con QPainter?
- 2. QPainter tasa de rendimiento de alta marco
- 3. Qt & OpenGL - QGLWidget & QPainter: buffering de profundidad
- 4. ¿Cómo usar una máscara con QPainter?
- 5. QT 4.5 - cómo obtengo un dispositivo QPainter en un QGraphicsView
- 6. 2d HUD no dibujando correctamente sobre QGLWidget (usando QPainter)
- 7. QPainter :: rotar deshabilita el antialiasing de texto dibujado
- 8. Uso de QPainter sobre OpenGL en QGLWidget al utilizar sombreadores
- 9. alternativas de pintura qpainter (el rendimiento apesta en Mac)
- 10. ¿Qué pasos son necesarios para habilitar el antialiasing cuando se utiliza un QPainter en un QGLWidget?
- 11. Usar ventana/ventana gráfica para voltear el eje y de QPainter
- 12. error de iptables en android: iptables-save y iptables-restore no funciona
- 13. Restore Vim Backups
- 14. Restore DB - Error RESTORE HEADERONLY está terminando anormalmente.
- 15. Restore C# Windows Forms backcolor
- 16. eclipse -restore proyectos faltantes
- 17. que imita Django modelo y save()
- 18. ¿Qué significa y hace MYSQLI_NUM?
- 19. SQL Server "RESTORE FILELISTONLY" Resultados
- 20. Doctrine date in save override/before save
- 21. ¿Qué es exactamente CDATA y qué hace?
- 22. pgAdmin III Restore PLAIN Backup
- 23. restore - git reset --hard HEAD^
- 24. Delphi - Minimize & Restore libera la memoria?
- 25. save visual studio state
- 26. ¿Qué hace '@reify' y cuándo debería usarse?
- 27. ¿Qué hace realmente mutex y semáforo?
- 28. ¿Qué hace la lista [x :: y] hacer?
- 29. Super.tap {} - ¿qué hace y usa casos?
- 30. Cuándo usar `save` vs` save! `En el modelo?
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