在Qt中表示相关模型的最佳方法是什么?

时间:2014-02-12 19:36:10

标签: qt model-view

我有一个Qt应用程序构建在管理SQL数据库的库之上。我有几个模型(QAbstractTableModel和QAbstractListModel子类)代表数据库中的不同表,我有一些相关的视图。

模型通常具有来自数据库的数据缓存和指向数据库对象的指针,可以根据需要使用这些指针刷新缓存。我已经实现了insertRows,removeRows和setData,以便它们在事务中尝试数据库操作,然后如果成功,则更新beginInsertRows()/ endInsertRows()内的缓存(或根据具体情况删除),以便缓存不会在开始/结束对之外发生变化,一切都保持同步。

到目前为止,非常好,而且一切正常。如果对数据库的所有更改都来自GUI,我认为这是一个很好的解决方案。

问题是某些数据库操作涉及更改由多个模型表示的表。对于应用程序,它看起来像源自数据库层的表更新。每当想要进行更改时,我都可以将数据库层调用到模型层中(这就是我现在正在做的事情),但我不喜欢它将下层数据库层暴露给Qt模型的方式。它还存在这样的问题:模型需要在事务中进行更改,以便了解操作何时成功或失败,并且通过模型层将阻止数据库层在事务中包含多个更新。

或者,我可以使模型中的缓存成为“真实”数据。然后,我可以更改底层数据库并在事后通知模型,此时它们将更新其缓存。我认为这适用于小型表,但由于它意味着缓存整个表,我认为它不适用于大型表。

我的想法是,这是一个很常见的问题,可能是某种已知的最佳实践。是这样的吗?

感谢。

0 个答案:

没有答案