Utilizando Qt4.8 en un Mint Linux 12, implementé una ventana simple que contiene un QTableView
para mostrar el contenido de un modelo. Los datos del modelo se actualizan continuamente (mensajes de registro) y la señal dataChanged()
se emite regularmente (es decir, cada 100 ms).QWidget actualización de eventos pero no actualización visual
El problema que veo es el tartamudeo de las actualizaciones visuales sobre la mesa.
Instalé un filtro de eventos en la ventana que cuenta updateRequest
-tipo de eventos, que deberían desencadenar un repintado de widget (también en widgets secundarios, es decir, el tableView
). Estos vienen con un tiempo promedio de ~ 170 ms entre ellos y una desviación estándar de ~ 90 ms (que es bastante grande, supongo). Sin embargo, la tasa de actualización visual percibida es solo dos o tres veces por segundo y me pregunto por qué. Parece que no todos los eventos updateRequest
desencadenan un repintado de widget o que el sistema de ventanas absorbe actualizaciones visuales.
Como segunda prueba, obligué a la ventana a actualizarse llamando al repaint
o update
cada 100 ms. Usando repaint
, vi un aumento correspondiente en los eventos de tipo updateRequest
y una disminución de la desviación estándar de los espacios; con update
, el número no aumentó. Sin embargo, solo hubo un aumento moderado de la tasa de actualización percibida en ambos casos.
También: ¿Existe un buen método para medir la frecuencia con la que un widget se repinta realmente sin tener que sobrecargar su controlador paintEvent
? Tal vez algo de QTest
?
Actualización: Extendí mi filtro de eventos para capturar también paintEvent
eventos de tipo. Solo hay un número de un dígito de aquellos contra> 1000 updateRequest
-tipos de tipo.
¡Buena idea! Actualmente tengo un calendario apretado en cuanto a proyectos, por lo que tomará un par de días probarlo. Creo que esto debería darme una buena visión general de la carga, pero en realidad conté los eventos updateRequest que llegan a mi widget y se acercan mucho más (en promedio, la mente) que la tasa de actualización percibida. – arne
El conteo está bien, pero no dice nada sobre el problema subyacente.Simplemente te dice que hay un problema, y bueno, obviamente puedes notarlo sin escribir una sola línea de código :) –