Tengo la siguiente IU, donde se muestra el sonograma (frecuencia + representación del sonido en el tiempo). Entonces, la imagen no se carga desde algún lugar, sino que se dibuja por QPainter
mientras se lee el archivo WAV
.¿Cómo se puede desplazar con eficacia la imagen de 1024x90000 en una ventana?
Mi implementación actual es un objeto enorme QImage
, donde se dibuja la imagen. Y en paintEvent()
, dibujo parte de la gran QImage
en el widget:
QPainter painter(this);
// (int, int, QImage*, int, int)
painter.drawImage(0, 0, *m_sonogram, 0, m_offset);
Pero, que yo sepa, el QPixmap
está optimizado para la visualización de mapas de píxeles en la pantalla, por lo que debería convertir el QImage
a un QPixmap
después de la el dibujo del sonograma está hecho?
Además, ¿merece la pena mantener la imagen grande como una especie de una lista enlazada de distintos QPixmap
objetos de tamaño más pequeño y crea paintEvent()
inteligente para operar en una lista de objetos más pequeños para evitar procedimientos de corte automática de Qt y así sucesivamente?
Cuando mi QImage es lo suficientemente grande, cada paintEvent()
consume mucho CPU
.
todo tipo de consejos son bienvenidos :)
Quizás publique algo sobre las máquinas en las que desea que se ejecute. Usar la lista enlazada podría ser inteligente dependiendo de las máquinas de destino. – EKS
Quizás estoy equivocado, pero parece que dibujas toda la imagen en cada evento de pintura. Puede pintar solo la parte de la imagen que muestra actualmente en la ventana gráfica. Eso debería mantener constante el consumo de CPU. – Masci
@Masci: consulte la nota "Clipping automático" en los documentos de QPaintEvent: Qt lo hace automáticamente y no necesita copiar explícitamente ningún estado de recorte QPaintEvent en su QPainter. – timday