Mejora del rendimiento del dibujo de QCustomplot

QCustomPlot utiliza varias técnicas, como el muestreo adaptativo y el almacenamiento en caché de objetos de texto, para reducir el tiempo necesario para volver a dibujar. Sin embargo, ciertas características (como rellenos translúcidos complejos y líneas gruesas) aún pueden causar una caída significativa en la velocidad. Si nota esto en la aplicación, aquí hay algunos consejos sobre cómo mejorar el rendimiento de la impresión repetida.

Hasta ahora, la mayor parte del tiempo se ha dedicado a dibujar funciones, especialmente al dibujar gráficos de alta densidad y otras tablas de dibujo. Para obtener el mejor rendimiento, tenga en cuenta lo siguiente:

  1. Especialmente cuando se usa un relleno complejo debajo / entre gráficos, líneas gruesas y colores translúcidos: habilite el renderizado acelerado por hardware OpenGL de QCustomPlot a través de QCustomPlot :: setOpenGl. Para obtener detalles sobre cómo habilitar correctamente la aceleración OpenGL, consulte la documentación aquí. La aceleración OpenGL está disponible para todas las versiones de Qt compatibles con QCustomPlot, y los backends correspondientes se seleccionan respectivamente. Para las versiones de Qt anteriores a la 5.0, la propia alternativa de QCustomPlot a la aceleración de OpenGL es proporcionar "-graphicssystem opengl" como un parámetro de línea de comando o llamada antes de crear el objeto QApplication. Esto puede lograr una aceleración OpenGL en toda la aplicación.
    QApplication :: setGraphicsSystem ("opengl")
    Tenga en cuenta que con la aceleración OpenGL, la velocidad de fotogramas máxima puede estar limitada por la frecuencia de sincronización vertical de la pantalla (VSync se puede desactivar en la configuración del controlador de la tarjeta gráfica). Por lo tanto, para un dibujo simple (la velocidad de fotogramas potencial es mucho mayor que 60 fotogramas por segundo), la aceleración de OpenGL puede ser numéricamente menor que el renderizador de software predeterminado, porque no se limita a la frecuencia VSync.
  2. Evite las líneas con un ancho de lápiz superior a uno. Esto es particularmente relevante para el renderizador de software predeterminado y no para la aceleración OpenGL.
  3. Evite rellenos complejos, por ejemplo, rellene canales entre gráficos con miles de puntos. Esto es particularmente relevante para el renderizador de software predeterminado y no para la aceleración OpenGL.
  4. Si tiene una figura relativamente estática pero compleja en la figura solo porque un objeto no complejo (por ejemplo, un elemento) ha cambiado, generalmente debe llamar al QCustomPlot :: replot completo, considere colocar el objeto que cambia regularmente en su propia capa Y establezca el modo (QCPLayer :: setMode) en QCPLayer :: lmBuffered. Esto permite que QCustomPlot asigne un búfer de dibujo dedicado para esta capa y permite que se vuelva a dibujar por separado usando QCPLayer :: replot, independientemente de otras capas que contengan gráficos potencialmente complejos y lentos. Para obtener más información, consulte la documentación del método correspondiente.
  5. Solo Qt4: use Qt 4.8 o superior. En comparación con Qt 4.7, el rendimiento se ha mejorado dos o tres veces. Sin embargo, QPainter está roto y dibujar elementos con precisión de píxeles como diagramas de dispersión no es tan bueno como Qt 4.7. Por lo tanto, al cambiar a Qt 4.8, hay un compromiso entre el rendimiento y la calidad de los gráficos. QCustomPlot intenta solucionar los fallos más graves de este tipo de forma interna.
  6. Para mejorar la velocidad de respuesta durante el arrastre de rango, considere configurar QCustomPlot :: setNoAntialiasingOnDrag en verdadero. Solo tiene sentido cuando se usa el renderizador de software predeterminado. (El suavizado de OpenGL no se puede cambiar sobre la marcha, lo que requiere una costosa reasignación del búfer de muestra).
  7. Solo Qt4: en X11 (GNU / Linux), evite usar el sistema de gráficos nativo más lento, use raster QApplication :: setGraphicsSystem proporcionando "-graphicssystem raster" como argumento de línea de comando o llamándolo antes de crear el objeto QApplication ("Ráster").
  8. Evite el uso de cualquier tipo de color alfa (transparente), especialmente en los rellenos.
  9. Evite cualquier forma de suavizado, especialmente en la línea de gráficos (consulte QCustomPlot :: setNotAntialiasedElements). Solo tiene sentido cuando se usa el renderizador de software predeterminado.
  10. Evite configurar repetidamente el conjunto de datos completo, por ejemplo, usando QCPGraph :: setData. Si la mayoría de los puntos de datos siguen siendo los mismos, por ejemplo, en una medición en ejecución, use QCPGraph :: addData en su lugar. Puede acceder y manipular datos existentes a través de QCPGraph :: data.
  11. Como última opción, intente reducir el número de puntos de datos dentro del rango de clave visible en un momento dado, por ejemplo, limitando el rango máximo de rango de clave (consulte QCPAxis :: rangeChanged signal). QCustomPlot puede optimizar millones de puntos fuera de la pantalla de forma muy eficaz.

Supongo que te gusta

Origin blog.csdn.net/feiyangqingyun/article/details/108779361
Recomendado
Clasificación