gpt4 book ai didi

c++ - QAbstractItemModel 中的嵌套操作

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:01 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com