如何在Qt中重置用户定义的树模型

时间:2014-02-20 20:35:31

标签: qt model

我终于为QTreeView实现了自己的树模型(继承自QAbstractItemModel)。 我所做的蓝图可以在这里找到: http://www.trinitydesktop.org/docs/qt4/itemviews-simpletreemodel.html

所以,我有:

  1. 用户定义的树项,它们是纯C ++(无Qt),并且由
  2. 包装
  3. 继承自QAbstractItemModel的TreeModel类(如上面的示例链接中所示)。
  4. 我现在有一个从(1.)生成的树项的树层次结构。此层次结构有数千个项目,我想在运行时将此层次结构插入到现有模型中。 我该怎么做?

    (我所拥有的是作为TreeItem指针的c ++树层次结构的根节点,以及必须插入“新子树”的现有模型的QModelIndex)

    我从这里找到了modelAboutToBeReset(),modelReset()和endResetModel():http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html#beginResetModel

    但我不知道这些是否是正确的功能,如果是,那么如何使用它们。

    有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在从模型中删除实际项目之前,您应该致电modelAboutToBeReset()。此调用将“冻结”所有视图请求任何数据。删除所有真实项目后,您应该调用endResetModel() - 它将取消冻结数据请求并强制所有连接的视图更新其内容。

答案 1 :(得分:0)

这就是我所做的:

void 
TreeModel::addNewSubTreeToModel( TreeNode* t_rootOfNewTree, TreeNode* t_addNewSubTreeAsChildOfThisItem )
{
   beginResetModel();
   t_rootOfNewTree->setParent(t_addNewSubTreeAsChildOfThisItem); 
   t_addNewSubTreeAsChildOfThisItem->addChild(t_rootOfNewTree);
   endResetModel();
}