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

Qt Model-View data and model in separate thread

本文关键字:模型 数据 线程 单独 Qt      更新时间:2023-10-16

以前,我问过在不同线程中运行模型和视图的问题,现在,我明白了它是如何带来问题的。为了避免这个问题,我想到了重复数据。当工作线程修改数据时,它会同时向GUI/Model线程发送更新,以使用相同的数据更新模型(因此GUI/Model中存在数据的精确副本)。

这听起来像是一种合理的方法吗?另一种方法是使用具有默认模型的直接小部件,如QTableWidget等,但我需要做很多默认情况下由QTableView支持的事情。

请建议!

链接到其他问题:设计模式、Qt模型/视图和多线程

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

数据对象

包含维护和操作数据所需的所有函数。数据存储在指向描述数据的对象的指针中。数据结构,我将留给你。

型号

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

场景1

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

场景2

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

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