gpt4 book ai didi

qt - QTreeView&QAbstractItemModel&insertRow

转载 作者:行者123 更新时间:2023-12-04 13:56:26 25 4
gpt4 key购买 nike

我正在尝试为QTreeView实现QAbstractItemModel。我在插入行时遇到问题。
我注意到,如果我在应用程序的开头插入所有内容,则一切正常。但是,如果我稍后插入行-在执行某些其他操作(如选择等)之后,新项目将保持不可见。而且QTreeView似乎根本不起作用!我是否必须发出一些信号来通知QTreeView有关行插入?

这是我的插入方法:

bool LayersModel::insertRows(int position, int count, const QModelIndex  & parent)
{
LayersModelItem * parentItem = getItem(parent);
if (position > parentItem->childCount())
return false;
beginInsertRows(parent,position,position+count-1);
bool result = true;
for (;count;--count)
result &= parentItem->insertChildren(position, new LayersModelItem());
endInsertRows();
return result;
}

LayersModelItem是带有QList及其子项和数据的类。

我的项目的完整代码(需要KDE库)在这里:
https://github.com/coder89/PhotoFramesEditor/tree/v0.0.8
要查看该问题,请在主窗口中选择蓝色项目之一,然后右键单击它,然后选择“删除项目”。 (此方法位于Canvas::removeItems()中,并且已完全注释-我很绝望,并且我试图找到此问题的原因...(实际上它并没有删除任何内容-它添加了新项目) )。

感谢您的帮助和建议!

最佳答案

快猜一下,用于QAbstractItemModel的QT文档说...

The model emits signals to indicate changes. For example, dataChanged() is emitted whenever items of data made available by the model are changed. Changes to the headers supplied by the model cause headerDataChanged() to be emitted. If the structure of the underlying data changes, the model can emit *layoutChanged() to indicate to any attached views that they should redisplay any items shown, taking the new structure into account*.



所以我想,您需要从模型中发出layoutChanged()信号(无论何时更改模型中的数据),以便更新连接的 View 。

还请阅读有关模型 View 架构的QT文档,以及如何在QT中实现它

看看是否有帮助,否则,我将尝试下载您的代码并对其进行调试,然后看看有什么问题。
祝你好运

关于qt - QTreeView&QAbstractItemModel&insertRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6586493/

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