【问题标题】:Is Qt’s model–view system intended to work with one model or multiple models?Qt 的模型-视图系统是打算使用一个模型还是多个模型?
【发布时间】:2015-02-19 21:58:22
【问题描述】:

我正在尝试显示一些带有 QTableView 子类和 QAbstractTableModel 子类的表格数据。我无法让数据显示出来,但在我真正开始研究之前,我想确保我按照预期的方式使用模型。

我的应用程序的数据层周期性地接收新数据,并通过调用slot之类的方式将数据分发到应用程序的其他部分

void new_data_received(QSharedPointer<Measurement> measurement)

Measurement 是我的数据类。这允许数据在不被复制的情况下传递(我的一些数据类非常大)。测量是不可变的;显示它们的表格视图不允许任何编辑。

MeasurementQAbstractTableModel 的子类,因此每当我收到新的测量值时,我都会在QTableView 子类实例上调用set_model,并将新数据作为参数。 (在收到第一次测量之前的时间内,表格视图上没有设置模型。)

Qt 的视图类是否打算像这样使用,并且每隔一段时间就会设置一个新模型?或者应该只有一个模型类的实例,与表视图具有相同的生命周期,接收新数据并发出dataChanged?后者似乎增加了不必要的结构 - 至少在我的情况下 - 但也许这就是系统设计使用的方式。

【问题讨论】:

  • 我认为带有 dataChanged 信号的模型是正确的方法。如果您使用非常大的数据集,则重置模型不是正确的方法。如果你能在上面工作,下一步,建立在它之上,你可能想探索代理模型,它建立在现有的大模型之上,但只加载要显示的数据。

标签: c++ qt qt5.2


【解决方案1】:

我不认为你的Measurement 类应该是QAbstractTableModel 的子类。它应该代表原始数据。因此,可能带有一些参数的结构或结构列表将是您的数据类的正确类型。 然后,您应该实现一个自定义模型,将传入数据添加到其中。因此,当新数据到达时,该模型将自动更新与其连接的所有视图。在这种情况下,新数据只会直接影响您的模型,而不是视图。

我想每次都重置视图的模型不是做你想做的事情的正确方法。

【讨论】:

    猜你喜欢
    • 2012-05-07
    • 2021-02-27
    • 2013-04-25
    • 2012-11-30
    • 2015-05-02
    • 2012-02-14
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多