2014-02-20 22 views
0

我終於實現了我自己的樹模型(從QAbstractItemModel繼承)爲QTreeView。 什麼,我做了一個藍圖,可以在這裏找到: http://www.trinitydesktop.org/docs/qt4/itemviews-simpletreemodel.html如何重置Qt中的用戶定義樹模型

所以,我有:

  1. 用戶定義的樹項目,這是純C++(無QT),並且這些被
  2. 包裹
  3. 從QAbstractItemModel繼承的TreeModel類(如上面的示例鏈接)。

我現在已經從(1.)中生成了樹項目的樹形層次結構。該層次結構包含數千個項目,我希望在運行時將此層次結構插入到現有模型中。 我該怎麼做?

(所有我是根節點到C++樹層次結構作爲TreeItem指針和現有的模型,其中「新的子樹」具有要被插入的QModelIndex)

我發現modelAboutToBeReset() ,modelReset()和endResetModel()從這裏:http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html#beginResetModel

但我不知道這些是否正確的功能,如果它們是,如何使用它們。

任何想法?

回答

1

在從模型中刪除實物之前,您應該致電modelAboutToBeReset()。此調用將「凍結」請求任何數據的所有視圖。刪除所有實際項目後,您應該撥打endResetModel() - 它將解凍數據請求並強制所有連接的視圖更新其內容。

0

這是我做過什麼:

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