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