由于您的 QTableView 继承了 QWidget,因此您可以对其调用以下命令:
setUpdatesEnabled(false);
changeAllYourData();
setUpdatesEnabled(true);
当 setUpdatesEnabled 为 false 时,对其进行的任何 Paint() 或 update() 调用都无效。因此,您可以阻止它更新,更改所有数据,然后重新启用它,可能通过手动调用 Paint() 或 update() 来手动调用它,我不确定这部分。
这是 setUpdatesEnabled 方法的文档。
QWidget更新已启用 http://doc.trolltech.com/4.6/qwidget.html#updatesEnabled-prop
希望这可以帮助。
用户评论后编辑:
您可以通过在执行原始的paint()或update()之前测试一个标志来为您的QItemDelegate子类实现您自己的setUpdatesEnabled(bool)(因为它不继承QWidget并且没有)。
之后,您可以指定 QTableView 的每个单元格(或行或列)是否必须更新或重新绘制。
通过这样做,您可以阻止其他单元格(委托)重新绘制,除非您更改手动创建的 setUpdatesEnabled 标志,但保留包含图形的单元格上的更新。
我必须说我从未测试过这个或类似的东西,所以我希望它能像我想象的那样工作。
祝你好运
用户编辑后编辑:
按照我之前的评论,您可以为每个代表设置一个标志,以仅绘制您的图形或整个图像,而不是为每个单元格设置一个标志(我认为您的图形位于单独的单元格中)。
希望这可以帮助,
EDIT:
我偶然发现了 Qt 4.7 中的一个新功能(我不知道你是否可以使用它,但它可以解决你的一些问题。)
该功能是 QStaticText。它是一个允许您缓存文本(字体和效果)并更快地绘制它们的类。查看链接here http://doc.qt.nokia.com/4.7-snapshot/qstatictext.html.
希望它能解决您的问题。