首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTreeView & QAbstractItemModel & insertRow

QTreeView & QAbstractItemModel & insertRow
EN

Stack Overflow用户
提问于 2011-07-06 01:26:05
回答 1查看 8.2K关注 0票数 6

我正在尝试为QTreeView实现QAbstractItemModel。我在插入行时遇到了问题。我注意到,如果我在应用程序的开头插入,一切工作正常。但是如果我稍后插入行-在一些其他操作(如选择等)之后。新项目保持不可见。此外,QTreeView似乎根本不起作用!我是否需要发出一些信号来通知QTreeView关于行插入的信息?

这是我的插入方法:

代码语言:javascript
复制
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()中),它被完整地注释了-我绝望了,我试图找到这个问题的原因……(事实上,它并没有删除任何东西--它添加了新的项目)。

感谢您的帮助和建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-06 14:01:33

只是快速猜测一下,QAbstractItemModel的QT文档上说...

该模型会发出信号来指示更改。例如,只要模型提供的数据项发生更改,就会发出dataChanged()。对模型提供的标头的更改会导致发出headerDataChanged()。

我还要阅读QT文档,了解模型视图体系结构,以及它在QT中是如何实现的

看看这是否有帮助,如果没有,我会试着下载你的代码并调试它,看看有什么问题。祝好运

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6586493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档