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

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

之前,我询问过在不同线程中运行模型和 View ,现在,我明白了它是如何产生问题的。为了规避这个问题,我想到了数据重复。当工作线程修改数据时,它会同时向 GUI/模型线程发送更新,以使用相同的数据更新模型(因此 GUI/模型存在数据的精确拷贝)。

这听起来像是一种合理的方法吗?其他方法是将直接小部件与默认模型(如 QTableWidget 等)一起使用,但随后我需要做很多默认情况下由 QTableView 提供支持的事情。

请推荐!

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

最佳答案

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

数据对象

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

型号

包含指向当前显示的数据的指针 vector

场景 1

QTableView 中的数据仅在这种情况下显示在 QTimer 信号或不同的信号上,数据存储被锁定并且 vector 用于显示模型 被剪切并放入模型中,然后调用 reset() 以使用新数据重新绘制 QTableView

场景 2

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

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

关于c++ - Qt模型-在单独的线程中查看数据和模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9792644/

相关文章:

c++ - 这是有效的 C++ 11

perl - 在 perl 中推荐一些好的 MVC 框架

java - 这是MVC模式吗

java - 在 Java 中与基于文本的游戏中的其他对象交互

c++ - 在 C++ 中的 Qt 中向 UI 动态添加未知数量的按钮

c++ - 为什么这个简单的程序会出现段错误?

c++ - 直方图程序给出奇怪的输出 C++

c++ - 使用 2 个 channel 编写自定义 QIODevice

c++ - 如何停靠弹出窗口?

c++ - 实例化基于 Qt 文件的记录器以在 C++ 库中进行调试