我将树视图作为视图,将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;
}
答案 0 :(得分:1)
如果从模型中删除行,则该行的子行也将被删除。所以你不需要做任何事情。
但是,看起来您正在使用QList实现自己的行存储。在这种情况下,它取决于您设置的内容 - 您的QList存储的类型。
答案 1 :(得分:0)
您应该能够使用递归来完成此操作。您可以更改您的功能,以便在删除项目之前,它会自动调用该项目的每个子项。
添加了:
如果你不想使用递归,那么你可以像这个问题一样使用堆栈:
答案 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);
}
}