c++ - QAbstractItemModel 中的嵌套操作

标签 c++ qt

在创建项目模型时,例如通过子类化 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/

相关文章:

C++ 11 unordered_map 段错误

c++ - 在插槽中传递 QString

android - 如何在 QtCreator 项目树(CMake-项目)中显示额外文件?

c++ - 循环依赖 c 意外错误或只是糟糕的设计

c++ - 使用 cin.get() 读取字符

c++ - 查看整个 QGraphicsScene

qt - 设置 Qt-QML CoverFlow 旋转角度时遇到问题

windows - Qt中如何通过进程名杀死进程

c++无法编译文件

c++ - 如何找到函数的多个定义