我正在尝试为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()中),它被完整地注释了-我绝望了,我试图找到这个问题的原因……(事实上,它并没有删除任何东西--它添加了新的项目)。
感谢您的帮助和建议!
发布于 2011-07-06 14:01:33
只是快速猜测一下,QAbstractItemModel的QT文档上说...
该模型会发出信号来指示更改。例如,只要模型提供的数据项发生更改,就会发出dataChanged()。对模型提供的标头的更改会导致发出headerDataChanged()。
我还要阅读QT文档,了解模型视图体系结构,以及它在QT中是如何实现的
看看这是否有帮助,如果没有,我会试着下载你的代码并调试它,看看有什么问题。祝好运
https://stackoverflow.com/questions/6586493
复制相似问题