要从 QListWidget* lst
中删除给定的 QListWidgetItem* item
,我可以使用以下代码 (taken from this answer):
delete lst->takeItem(lst->row(item)); // method 1
另一方面,如果我只是销毁该项目,它也会从列表中删除(至少它从 QListWidget
中消失)。
delete item; // method 2
QListWidget
documentation指示使用 takeItem
但没有提及任何有关删除项目的信息(QListWidgetItem
也没有任何信息)。
To remove items from the list, use takeItem().
使用方法一(takeItem
然后删除)和方法二(直接删除item)有什么区别吗?也许是我遗漏的内存泄漏,未发出的信号等?我的意思是,删除项目(当然,如果你有的话)比搜索它似乎更容易。
最佳答案
以下行来自 docs回答你的问题:
To remove an item (row) from the list entirely, either delete the item or use
takeItem()
.
这意味着拿走项目然后删除它,或者直接删除它没有区别。
takeItem()
只是从项目中删除所有权,这样您就有机会对其进行任何操作(也许在另一个 QListWidget
中使用它)。如果您只想删除该项目,您可以直接删除它,析构函数将负责删除所有权。
关于c++ - 删除 QListWidgetItem:QListWidget::takeItem(item) vs 删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783228/