在将整个文件读取到QStandardItemModel

时间:2016-08-28 14:22:25

标签: c++ multithreading qt qtableview qstandarditemmodel

我有一些新手问题。我不确定我是否正确理解了模型 - 视图 - 控制器设计模式。

也许我会从描述我的问题开始。我正在从文件中读取一些数据。这可以说10秒钟,之后我会在表格中显示这些数据。问题是我应该如何存储这些数据?除了QStandardItemModel我应该有另一个容器,我将从文件中读取数据并在其他线程中使用它?例如,我在Gui线程中有QStandardItemModel,我创建了另一个容器,让我们说QVector。我将数据从文件加载到QVector,然后将数据从QVector移到QStandardItemModel

我无法在其他线程中使用QStandardItemModel并直接从文件中读取数据到QStandardItemModel,因为我知道GUI会冻结,因为QStandardItemModel会在appendRow之后发出更新视图的信号}。

或者我可能应该创建自定义模型并添加方法以仅在整个文件加载到QStandardItemModel时更新视图? QTableView有自己的数据容器,它与模型不同步?有可能/正确的方式吗?

我读新文件时的情况如何?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您可以采取以下措施来解决问题:

  1. 当您需要从文件中加载新数据时,请在QTableView中为nullptr设置模型。
  2. 使用文件中的数据填充QStandardItemModel(此模型是您的QTableView的模型)非主(非GUI)线程。
  3. 使用主(GUI)主题中QTableView的数据设置模型。
  4. 当然,解决问题的最简单方法也可能是向用户显示如下内容:“数据加载,请稍候......”,同时在主要(GUI)QStandardItemModel中加载数据线程。