如何删除treeview中所选项目下的所有项目

时间:2011-08-04 11:05:25

标签: c++ qt

我将树视图作为视图,将QStandardItemModel作为模型。 现在我模型中的每个节点都有子节点。我的问题是 如何删除所选项下的所有子节点? 我发现的只是这个,但这是一排。我需要项目下的所有行。

bool TableModel::removeRows(int position, int rows, const QModelIndex &parent)
{
    beginRemoveRows(parent, position, position + rows - 1);

    for (int row = 0; row < rows; ++row) {
        rowList.removeAt(position);
    }

    endRemoveRows();
    return true;
}

3 个答案:

答案 0 :(得分:1)

如果从模型中删除行,则该行的子行也将被删除。所以你不需要做任何事情。

但是,看起来您正在使用QList实现自己的行存储。在这种情况下,它取决于您设置的内容 - 您的QList存储的类型。

答案 1 :(得分:0)

您应该能够使用递归来完成此操作。您可以更改您的功能,以便在删除项目之前,它会自动调用该项目的每个子项。

添加了:

如果你不想使用递归,那么你可以像这个问题一样使用堆栈:

Loop through folders without recursion

答案 2 :(得分:-1)

private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
        {
                string sql = @"delete tbl_requirements1 where aid = " + int.Parse(treeView1.SelectedNode.Tag.ToString()) + "";
                Utils.ExecuteSql(sql);
                DeleteNodes(treeView1.SelectedNode.Nodes);
                treeView1.SelectedNode.Remove();

        }
        public void DeleteNodes(TreeNodeCollection treeViewNode)
        {
            foreach (TreeNode myNode in treeViewNode)
            {
                int aid = int.Parse(myNode.Tag.ToString());

                string sql = "delete tbl_requirements1 where aid=" + aid + "";
                Utils.ExecuteSql(sql);

                if (myNode.GetNodeCount(true) > 0)
                {
                    DeleteNodes(myNode.Nodes);
                }

            }