我刚刚阅读了Qt 4.8的Model / View文档。我相信理解模型/视图(Delegates / SelectionModel)是如何工作的。我不确定的一件事是当我有一个TreeView时如何操作数据。
想象一下,当选择一个项目/行时,让TreeView显示一个列表和按钮以从该列表中删除元素。我在这里看到两种方法
1)在PushButton的插槽中,我检索TreeView的SelectionModel和ItemModel,并调用model-> removeRow(index.row ...)。这样,模型(我从QAbstractItemModel子类化)操纵它应该表示的数据。
2)在PushButton的插槽中,我直接从数据源中删除了TreeView模型所代表的项目。然后我可以通过信号/插槽将数据与模型链接,这样模型就可以告诉TreeView底层数据已经发生了变化。
添加元素可以想象相同的场景。我应该将新元素添加到数据中,该数据将其更改状态发送到通知TreeView的ItemModel,还是应该通过ItemMode添加新项?
我还没有找到任何最佳实践文档。这两种方法的区别很大,我希望先得知哪种方法更可取。
是否有人建议遵循哪条路径?
由于
答案 0 :(得分:1)
1)是首选 - 您应该避免直接从UI代码中操纵数据源 - 如果您通过模型,您的生活会更好。至少为模型添加一个方法来进行数据操作,并从UI代码中调用该方法。
你会发现一些Qt的方法受到保护,只能从模型本身调用它们(例如endInsertRows等)。