我有以下插入节点:
layoutAboutToBeChanged();
beginInsertRows(createIndex(p_parent->row(), 0, p_parent), start, end);
TreeNode* p_node = new TreeNode(p_parent, p_data);
p_parent->appendChild(start, p_node);
endInsertRows();
layoutChanged();
并删除行:
layoutAboutToBeChanged();
beginRemoveRows(createIndex(p_parent->row(), 0, p_parent), row, row);
p_parent->removeChildren(row, row+1, this);
endRemoveRows();
layoutChanged();
当removeChildren
被调用时,对于每个被删除的节点,都会执行以下操作:
changePersistentIndex(createIndex(p_node->row(), 0, p_node), QModelIndex());
delete p_node;
有用。我可以添加节点和删除节点。
术语注意:我正在使用nodes
和rows
互换。很抱歉有任何混淆。
什么不起作用:
- 如果在选定节点的前面插入新行。新插入的节点被选中。[这不是我所期望的。]
- 如果选择了一行然后又将其删除,则立即进行核心转储。
- 如果将鼠标悬停在已删除的行上,则立即进行核心转储。
如果我不删除p_node
. 一切运行良好。但显然这会造成内存泄漏。我究竟做错了什么?
作为参考,我在 64 位 Linux 上使用 QT 5.0.2。