Используя Qt4.8 на Mint Linux 12, я реализовал простое окно, содержащее QTableView
для отображения содержимого модели. Данные модели постоянно обновляются (сообщения журнала), а сигнал dataChanged()
генерируется на регулярной основе (то есть каждые 100 мс).
Проблема, которую я вижу, заключается в заикании визуальных обновлений на столе.
Я установил фильтр событий в окно, которое подсчитывает события типа updateRequest
, которые должны инициировать перерисовку виджета (также для дочерних виджетов, то есть tableView
). Они приходят со средним временем ~ 170 мс между ними и стандартным отклонением ~ 90 мс (что, я думаю, довольно велико). Однако воспринимаемая частота обновления изображения составляет всего два или три раза в секунду, и мне интересно, почему. Похоже, что не все события updateRequest
вызывают перерисовку виджета или что оконная система проглатывает визуальные обновления.
В качестве второго теста я заставил окно обновляться, вызывая repaint
или update
каждые 100 мс. Используя repaint
, я увидел соответствующее увеличение updateRequest
событий типа и уменьшение стандартного отклонения пробелов; с update
число не увеличилось. Однако в обоих случаях наблюдалось лишь умеренное увеличение воспринимаемой частоты обновления.
Кроме того: есть ли хороший способ измерить, как часто виджет действительно перерисовывается без необходимости перегружать его обработчик paintEvent
? Может что-то из QTest
?
Обновление:Я расширил свой фильтр событий, чтобы он также улавливал события типа paintEvent
. Есть только однозначное число таких событий по сравнению с > 1000 updateRequest
событий типа.