, поскольку ваш QTableView наследует QWidget, вы можете вызвать на нем следующее:
setUpdatesEnabled(false);
changeAllYourData();
setUpdatesEnabled(true);
Когда setUpdatesEnabled имеет значение false, любой вызов paint () или update () для него не имеет никакого эффекта. Таким образом, вы можете остановить его обновление, изменить все ваши данные и затем снова включить его, возможно, вручную вызвав paint () или update () вручную, я не уверен в этой части.
Вот документация для метода setUpdatesEnabled.
Обновления QWidgetEnabled
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ после комментария от пользователя:
Вы можете реализовать свой собственный setUpdatesEnabled (bool) для своего подкласса QItemDelegate (поскольку он не наследует QWidget и не имеет его), протестировав флаг перед выполнением вашего исходного paint () или update ().
После этого вы можете указать для каждой ячейки (или строки, или столбца) вашего QTableView, должны ли они быть обновлены или перекрашены.
Сделав это, вы можете остановить перекрашивание других ваших ячеек (делегатов), если только вы не измените флаг setUpdatesEnabled, который вы создали вручную, но сохраните обновления в ваших ячейках, содержащих график.
Я должен сказать, что никогда не проверял это или что-то подобное, поэтому я надеюсь, что это работает так, как я думаю.
Удачи
РЕДАКТИРОВАТЬ после редактирования пользователем:
Следуя моему предыдущему комментарию, вместо установки флага для каждой ячейки (я думал, что ваш график находится в отдельной ячейке), вы можете установить флаг для каждого делегата, чтобы рисовать только ваш график или все изображение.
Надеюсь, это поможет,
EDIT:
Я наткнулся на новую функцию в Qt 4.7 (я не знаю, возможно ли вам ее использовать, но она может решить некоторые ваши проблемы.)
Особенностью является QStaticText. Это класс, который позволяет вам кэшировать текст (шрифт и эффекты) и рисовать их быстрее. Смотрите ссылку здесь .
Надеюсь, это решит вашу проблему.