在创建项目模型时,例如通过子类化QAbstractItemModel
,行插入和删除等基本操作是嵌套吗?
在实践中,例如,必须立即致电::beginInsertRows()
,然后致电::endInsertRows()
?或者相反,是否允许使用不同的参数调用::beginInsertRows()
两次,然后进行插入,然后再调用相应的::endInsertRows()
两次?
我很想知道因为在阅读QAbstractItemModel
来源observed时,操作是基于堆栈完成的。请注意d->changes.push...
另一方面,d->changes
除了beginInsert/endInsert...
等功能对之外的任何地方都不使用。{/ p>
答案 0 :(得分:0)
在我的情况下,我打破了插入,以便我可以先为父项执行beginInsertRows
/ 插入 / endInsertRows
序列,然后{{1子项目的插入 / beginInsertRows
序列。
一开始看起来好像很好,但是当我使用endInsertRows
的自定义模型时,我遇到了一些非常奇怪的错误。经过几个小时的修复我的模型中的微小不一致并获得越来越好(或者只是更健全)的结果后,我陷入了最后一种奇怪的行为,但是我没有想到在哪里寻找错误。
然后我想我会尝试另一种方法:一个QSortFilterProxyModel
,插入父母和他们的孩子,然后一个beginInsertRows
。令我惊讶的是,它运作良好。最后,我可以在我的任务列表中勾选这个血腥的模型。
<小时/> @vahancho,对不起我之前的评论。由于我的不耐烦,我因为试图让我的自定义模型表现出来并误解了你的问题而感到筋疲力尽。您的评论实际上是正确答案。