在没有QModelIndex的情况下从QTreeView中删除项目

时间:2017-01-13 07:53:32

标签: qt qtreeview qabstractitemmodel qmodelindex

假设我决定从我的模型中随机删除一些项目。我有对这些项目的引用,但这还不足以正确调用 beginRemoveRows()方法。它需要知道每个项目的QModelIndex。

但要获取项目的QModelIndex,我还需要知道父项的QModelIndex!

virtual QModelIndex     index(int row, int column, const QModelIndex & parent = QModelIndex()) 

只有RootItem没有父级,因此不需要QModelIndex。所以我需要从那里开始并递归遍历所有孩子,直到我最终为每个项目提供适当的QModelIndex,如果这是正确的做事方式。

有没有更好的方法来获取随机项的QModelIndex?

1 个答案:

答案 0 :(得分:0)

没关系。显然我可以使用 createIndex 方法为我的项目制作QModelIndex。

public void fillTreeViewByList()
{
    connect.Open();

    TreeViewColorDescNodes firstNode = new TreeViewColorDescNodes();  // Everything from here down is probably wrong...

    tvDiscountMaintenance.Nodes.Add("Select All"); 

    //firstNode has the instance of TreeViewColorDescNodes() which has list of items from DB
    //So you need to iterate the items from this instance
    foreach (string item in firstNode.ColDescNode)
    {
        //You need to create the tree node with text in item rather than List name
        TreeNode colorDesc = new TreeNode(item);

        //You need to add the tree node to the tree control rather than the string
        tvDiscountMaintenance.Nodes[0].Nodes.Add(colorDesc);
    }
}