Qt 的模型-视图系统是打算用于一个模型还是多个模型?
Is Qt’s model–view system intended to work with one model or multiple models?
我正在尝试使用 QTableView
subclass 和 QAbstractTableModel
subclass 显示一些表格数据。我无法让数据显示出来,但在我开始真正研究它之前,我想确保我按照预期的方式使用模型。
我的应用程序的数据层定期接收新数据并通过调用像
这样的插槽将数据分发到应用程序的其他部分
void new_data_received(QSharedPointer<Measurement> measurement)
其中 Measurement
是我的数据 class。这允许数据在不被复制的情况下传递(我的一些数据 classes 非常大)。测量免疫table; table 显示它们的视图不允许任何编辑。
Measurement
是 QAbstractTableModel
的子 class,因此每当我收到新的测量结果时,我都会在 QTableView
子[=29 上调用 set_model
=] 以新数据作为参数的实例。 (在收到第一个测量值之前,table 视图上没有设置模型。)
Qt 的视图 classes 是否打算像这样使用,每隔一段时间就会设置一个新模型?或者应该只有一个模型 class 的实例,与 table 视图具有相同的生命周期,接收新数据并发出 dataChanged
?后者似乎增加了不必要的结构——至少在我的情况下——但也许这就是系统设计使用的方式。
我认为您的 Measurement
class 不应该是 QAbstractTableModel
的子class。它应该代表原始数据。因此,也许带有一些参数的结构或结构列表将是您数据的正确类型 class。
然后你应该实现一个自定义模型,传入的数据被添加到其中。因此,当新数据到达时,该模型将自动更新所有连接到它的视图。在这种情况下,新数据只会直接影响您的模型,不会影响视图。
我想每次都重置视图的模型并不是做你想做的事情的正确方法。
我正在尝试使用 QTableView
subclass 和 QAbstractTableModel
subclass 显示一些表格数据。我无法让数据显示出来,但在我开始真正研究它之前,我想确保我按照预期的方式使用模型。
我的应用程序的数据层定期接收新数据并通过调用像
这样的插槽将数据分发到应用程序的其他部分void new_data_received(QSharedPointer<Measurement> measurement)
其中 Measurement
是我的数据 class。这允许数据在不被复制的情况下传递(我的一些数据 classes 非常大)。测量免疫table; table 显示它们的视图不允许任何编辑。
Measurement
是 QAbstractTableModel
的子 class,因此每当我收到新的测量结果时,我都会在 QTableView
子[=29 上调用 set_model
=] 以新数据作为参数的实例。 (在收到第一个测量值之前,table 视图上没有设置模型。)
Qt 的视图 classes 是否打算像这样使用,每隔一段时间就会设置一个新模型?或者应该只有一个模型 class 的实例,与 table 视图具有相同的生命周期,接收新数据并发出 dataChanged
?后者似乎增加了不必要的结构——至少在我的情况下——但也许这就是系统设计使用的方式。
我认为您的 Measurement
class 不应该是 QAbstractTableModel
的子class。它应该代表原始数据。因此,也许带有一些参数的结构或结构列表将是您数据的正确类型 class。
然后你应该实现一个自定义模型,传入的数据被添加到其中。因此,当新数据到达时,该模型将自动更新所有连接到它的视图。在这种情况下,新数据只会直接影响您的模型,不会影响视图。
我想每次都重置视图的模型并不是做你想做的事情的正确方法。