要从QListWidgetItem* item
删除给定的QListWidget* lst
,我可以使用以下代码(taken from this answer):
delete lst->takeItem(lst->row(item)); // method 1
另一方面,如果我只是销毁该项目,它也会从列表中删除(至少从QListWidget
消失)。
delete item; // method 2
QListWidget
documentation表示使用takeItem
但未提及有关删除项目的任何内容(QListWidgetItem
也没有任何信息)。
要从列表中删除项目,请使用takeItem()。
使用方法1(takeItem
然后删除它)和方法2(直接删除项目)之间有什么区别吗?也许我错过了内存泄漏,没有发出的信号等等?我的意思是,删除项目似乎更容易(当然,如果你有它),而不是搜索它。
答案 0 :(得分:2)
docs中的以下行回答了您的问题:
要完全从列表中删除项目(行), 删除项目或使用
takeItem()
。
这意味着在取项目然后删除它或直接删除它之间没有区别。
takeItem()
只是删除了该项目的所有权,因此您有机会对其执行任何操作(可能在另一个QListWidget
中使用它)。如果您只想删除该项,则可以删除它,析构函数将负责删除所有权。
答案 1 :(得分:2)
与返回或不删除的项目有很大的语义差异:
要从列表中完全删除项目(行),请删除该项目或使用takeItem()
takeItem
和calling the destructor directly之间的最终差异在于调用takeAt
而不是removeAt
,并且在第一种情况下,能够在进入时返回已移除的项目后者你只是完全丢弃了这个东西( take 不删除该项目,你以后再做)