在创建项目模型时,例如通过子类化 QAbstractItemModel
,是否要嵌套行插入和删除等基本操作?
例如,在实践中,必须在调用 ::beginInsertRows()
之后立即调用 ::endInsertRows()
吗?或者相反,是否允许使用不同的参数调用 ::beginInsertRows()
两次,然后进行插入,然后调用相应的 ::endInsertRows()
两次?
我想知道,因为在阅读 QAbstractItemModel
来源时,我 observed该操作是在堆栈的基础上完成的。注意 d->changes.push...
另一方面,除了 then beginInsert/endInsert...
等函数对之外,d->changes
没有在其他任何地方使用。
最佳答案
在我的例子中,我分解了插入,以便我可以首先为父项执行 beginInsertRows
/insertion/endInsertRows
序列然后是子项的 beginInsertRows
/insertion/endInsertRows
序列。
一开始它似乎运行良好,但是当我将我的自定义模型与 QSortFilterProxyModel
一起使用时,我遇到了一些非常奇怪的错误。经过几个小时修复模型中的微小不一致并获得越来越好(或更理智)的结果后,我被最后一个奇怪的行为困住了,但我想不出在哪里寻找错误。
然后我想尝试另一种方法:一个 beginInsertRows
,插入 parent 和他们的 child ,然后一个 endInsertRows
。令我惊讶的是,它工作得很好。我终于可以从我的任务列表中勾选这个该死的模型了。
@vahancho,对我之前的评论感到抱歉。由于我的不耐烦,我已经筋疲力尽地试图让我的自定义模型表现出来并误解了你的问题。您的评论实际上包含正确答案。
关于c++ - QAbstractItemModel 中的嵌套操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516995/