3

我刚刚阅读了 Qt 4.8 的模型/视图文档。我相信了解模型/视图(代表/选择模型)是如何工作的。我不确定的一件事是当我有一个例如 TreeView 时如何操作数据。

想象一下,当一个项目/行被选中时,有一个 TreeView 来显示一个列表和一个按钮来从这个列表中删除元素。我在这里看到两种方法

1) 在 PushButton 的插槽中,我检索 TreeView 的 SelectionModel 和 ItemModel 并调用 model->removeRow(index.row ...)。通过这种方式,模型(我从 QAbstractItemModel 子类化)操纵它应该表示的数据。

2) 在 PushButton 的插槽中,我直接从数据源中删除了 TreeView 模型所代表的项目。然后我可以通过信号/槽将数据与模型链接起来,这样模型就可以告诉 TreeView 底层数据已经改变。

可以通过添加元素来想象相同的场景。我应该将新元素添加到数据中,将其更改状态信号通知给 TreeView 的 ItemModel,还是应该通过 ItemMode 添加新项目?

我还没有找到任何关于此的最佳实践文档。这两种方法有很大的不同,所以我想提前知道哪一种更可取。

有人建议走哪条路吗?

谢谢

4

1 回答 1

1

1) 更可取-您可能应该避免直接从 UI 代码操作数据源-如果您通过模型,您的生活会更好。至少在你的模型中添加一个方法来进行数据操作,并从你的 UI 代码中调用该方法。

您会发现 Qt 的一些方法受到保护,因此只能从模型本身调用它们(例如 endInsertRows 等)

于 2012-07-09T10:31:24.620 回答