删除 QListWidgetItem:QListWidget::takeItem(item) vs 删除项目
Remove QListWidgetItem: QListWidget::takeItem(item) vs delete item
要从 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
中使用它)。如果您只想删除该项目,您可以直接删除它,析构函数将负责删除所有权。
关于return是否删除的项目存在很大的语义差异:
To remove an item (row) from the list entirely, either delete the item or use takeItem()
takeItem
and calling the destructor directly will be in calling takeAt
instead of removeAt
之间的最终区别,在第一种情况下,能够 return 删除的项目,而在后者中,您只需完全丢弃该项目(采取 不删除项目,你稍后再做)
要从 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
中使用它)。如果您只想删除该项目,您可以直接删除它,析构函数将负责删除所有权。
关于return是否删除的项目存在很大的语义差异:
To remove an item (row) from the list entirely, either delete the item or use takeItem()
takeItem
and calling the destructor directly will be in calling takeAt
instead of removeAt
之间的最终区别,在第一种情况下,能够 return 删除的项目,而在后者中,您只需完全丢弃该项目(采取 不删除项目,你稍后再做)