Qt模型 - 在单独的线程中查看数据和模型

时间:2012-03-20 18:17:55

标签: c++ model-view-controller qt qtableview qtablewidget

以前,我询问过在不同的线程中运行模型和视图,现在,我理解它是如何造成问题的。为了避免这个问题,我在考虑重复数据。当工作线程修改数据时,它同时向GUI /模型线程发送更新以使用相同的数据更新模型(因此存在与GUI /模型的精确数据副本)。

这听起来像是看似合理的做法吗?其他方法是使用带有QTableWidget等默认模型的直接小部件,但是我需要做很多默认情况下由QTableView提供支持的东西。

请建议!

链接到其他问题: Design Pattern, Qt Model/View and multiple threads

1 个答案:

答案 0 :(得分:0)

有两种情况是可能的,但在任何一种情况下,您都需要至少2个对象,如下所示:

数据对象

包含维护和操作数据所需的所有功能。数据存储在指针中,用于描述数据的对象。数据结构我将留给您。

<强>模型

包含指向当前正在显示的数据的指针向量

场景1

QTableView中的数据仅在QTimer信号或不同信号上显示,数据存储被锁定,显示模型的矢量被剪切并放入模型和reset()被调用以使QTableView重新绘制新数据。

场景2

您可以通过ItemEditor中的自定义QTableView操作数据。在这种情况下,包含QTableView的顶级窗口小部件应该引用数据对象QTableView以及ItemEditor发出的信号的信号处理程序编辑完成。然后,此信号处理程序将数据结构锁定在数据对象中并更新它,一旦完成,它可能会剪切一个新的向量来显示,但更常见的是它不会没有。

如何设置锁定,搜索等完全取决于您。