2010-02-10 7 views
6

Estoy usando Qt/C++ y tratando de dibujar un QGraphicsScene grande y complejo. Una vez que agrego muchos objetos, la panorámica y el zoom se vuelven desagradablemente lentos. (No es sorpresa aquí, por supuesto). He jugado con el almacenamiento en caché de coordenadas del dispositivo (ayuda con el desplazamiento a un punto) y las actualizaciones mínimas de la ventana gráfica, etc., pero finalmente hay demasiados objetos. Lo que me gustaría hacer es dibujar los elementos asincrónicamente para que no controlen la IU de alguna manera. En otras palabras, al igual que Google Maps, quiero desplazar el zoom y hacer zoom, y dejar que el dibujo se ponga al día lo más rápido posible, pero que se pueda volver a desplazar antes de que los elementos terminen de dibujarse.¿Cómo puedo implementar el desplazamiento de mosaico similar a Google Maps en Qt?

Un método que estoy intentando es crear dos QGraphicsScenes. Uno tiene los objetos reales pero no está conectado a un QGraphicsView. El otro QGraphicsScene está conectado al QGraphicsView, pero solo tiene algunos QPixmaps en mosaico que se dimensionan para cubrir la pantalla. El plan es usar ciclos de CPU de repuesto para actualizar cualquier mapa de píxeles que lo necesite. Esto parece que me dará el control necesario sobre el renderizado (para que no tenga que bloquear mientras reescribo toda la escena visible). ¿Pensamientos? ¿Alguien ha implementado esto?

Respuesta

3

Echa un vistazo aquí: Generating content in threads.

Parece que esto es similar a lo que está tratando de hacer. Los mecanismos de mosaico son formas muy comunes de cargar grandes cantidades de datos. Aparte del enlace publicado, no he visto un ejemplo simple usando QGraphicsView.

40000 Chips también muestra algunas cosas sobre la gestión de grandes cantidades de datos.

+0

He visto "40000 Chips" - mi comprensión de ese ejemplo es que hace una buena técnica de implementación de "Nivel de detalle", donde solo tiene un elemento en el QGraphicsScene para cada chip, pero la pintura() del el chip extrae detalles adicionales si el zoom está por encima de varios umbrales. El enlace que ofreces parece muy relevante. Lo probaré en detalle tan pronto como tenga la oportunidad ... ¡Gracias! –

Cuestiones relacionadas