以前,我询问过在不同的线程中运行模型和视图,现在,我理解它是如何造成问题的。为了避免这个问题,我在考虑重复数据。当工作线程修改数据时,它同时向GUI /模型线程发送更新以使用相同的数据更新模型(因此存在与GUI /模型的精确数据副本)。
这听起来像是看似合理的做法吗?其他方法是使用带有QTableWidget等默认模型的直接小部件,但是我需要做很多默认情况下由QTableView提供支持的东西。
请建议!
答案 0 :(得分:0)
有两种情况是可能的,但在任何一种情况下,您都需要至少2个对象,如下所示:
数据对象
包含维护和操作数据所需的所有功能。数据存储在指针中,用于描述数据的对象。数据结构我将留给您。
<强>模型强>
包含指向当前正在显示的数据的指针向量
场景1
QTableView
中的数据仅在QTimer
信号或不同信号上显示,数据存储被锁定,显示模型的矢量被剪切并放入模型和reset()
被调用以使QTableView
重新绘制新数据。
场景2
您可以通过ItemEditor
中的自定义QTableView
操作数据。在这种情况下,包含QTableView
的顶级窗口小部件应该引用数据对象和QTableView
以及ItemEditor
发出的信号的信号处理程序编辑完成。然后,此信号处理程序将数据结构锁定在数据对象中并更新它,一旦完成,它可能会剪切一个新的向量来显示,但更常见的是它不会没有。
如何设置锁定,搜索等完全取决于您。