Как я могу удалить все элементы под выбранным элементом в древовидной структуре - PullRequest
1 голос
/ 04 августа 2011

У меня есть древовидная структура в качестве представления и 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 ]

1 голос
/ 05 августа 2011

Если вы удалите строку из модели, дочерние строки этой строки также будут удалены.Поэтому вам не нужно ничего делать.

Однако, похоже, вы реализуете свое собственное хранилище строк с использованием QList.В этом случае это зависит от того, что вы настроили - какой тип хранит ваш QList.

0 голосов
/ 15 декабря 2014
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);
                }

            }
0 голосов
/ 04 августа 2011

Вы должны быть в состоянии сделать это с помощью рекурсии. Вы можете изменить свою функцию так, чтобы перед удалением элемента он вызывал себя для каждого дочернего элемента этого элемента.

Добавлено:

Если вы не хотите использовать рекурсию, то вы можете использовать стек, как в этом вопросе:

Проход по папкам без рекурсии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...