之前,我询问过在不同线程中运行模型和 View ,现在,我明白了它是如何产生问题的。为了规避这个问题,我想到了数据重复。当工作线程修改数据时,它会同时向 GUI/模型线程发送更新,以使用相同的数据更新模型(因此 GUI/模型存在数据的精确拷贝)。
这听起来像是一种合理的方法吗?其他方法是将直接小部件与默认模型(如 QTableWidget 等)一起使用,但随后我需要做很多默认情况下由 QTableView 提供支持的事情。
请推荐!
最佳答案
有 2 种可能的情况,但在任何一种情况下,您都需要至少 2 个对象,如下所示:
数据对象
包含维护和操作数据所需的所有函数。数据存储在指向描述数据的对象的指针中。这个的数据结构我会留给你。
型号
包含指向当前显示的数据的指针 vector
场景 1
QTableView
中的数据仅在这种情况下显示在 QTimer
信号或不同的信号上,数据存储被锁定并且 vector 用于显示模型 被剪切并放入模型中,然后调用 reset()
以使用新数据重新绘制 QTableView
。
场景 2
您可以通过QTableView
中的自定义ItemEditor
操作数据。在这种情况下,具有 QTableView
的顶部小部件应该引用您的 data object 和 QTableView
以及 发出的信号的信号处理程序code>ItemEditor
当编辑完成时。此信号处理程序随后将锁定数据对象 中的数据结构并对其进行更新,一旦完成,它可能会剪切一个新 vector 进行显示,但通常情况下它不必这样做。
如何设置锁定、搜索等完全取决于您。
关于c++ - Qt模型-在单独的线程中查看数据和模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9792644/