Qt View/Model/Data Paradigm:如何修改数据?
Posted
技术标签:
【中文标题】Qt View/Model/Data Paradigm:如何修改数据?【英文标题】:Qt View/Model/Data Paradigm: How to modify data? 【发布时间】:2012-07-09 09:25:01 【问题描述】:我刚刚阅读了 Qt 4.8 的模型/视图文档。我相信了解模型/视图(代表/选择模型)是如何工作的。我不确定的一件事是当我有一个 TreeView 时如何操作数据。
想象一下,当一个项目/行被选中时,有一个 TreeView 来显示一个列表和一个按钮来从这个列表中删除元素。我在这里看到了两种方法
1) 在 PushButton 的插槽中,我检索 TreeView 的 SelectionModel 和 ItemModel 并调用 model->removeRow(index.row ...)。通过这种方式,模型(我从 QAbstractItemModel 子类化)操纵它应该表示的数据。
2) 在 PushButton 的插槽中,我直接从数据源中删除了 TreeView 模型所代表的项目。然后我可以通过信号/槽将数据与模型链接起来,这样模型就可以告诉 TreeView 底层数据已经改变了。
可以通过添加元素来想象相同的场景。我应该将新元素添加到数据中,将其更改状态信号通知给 TreeView 的 ItemModel,还是应该通过 ItemMode 添加新项目?
我还没有找到任何关于此的最佳实践文档。这两种方法有很大的不同,所以我想提前知道哪一种更可取。
有没有人建议走哪条路?
谢谢
【问题讨论】:
【参考方案1】:1) 更可取 - 您可能应该避免直接从 UI 代码操作数据源 - 如果您通过模型,您的生活会更好。至少向您的模型添加一个方法来进行数据操作,并从您的 UI 代码中调用该方法。
您会发现 Qt 的一些方法受到保护,因此只能从模型本身调用它们(例如 endInsertRows 等)
【讨论】:
以上是关于Qt View/Model/Data Paradigm:如何修改数据?的主要内容,如果未能解决你的问题,请参考以下文章