删除 QListWidgetItem: QListWidget::takeItem(item) 与删除项目

cbu*_*art 5 c++ qt qlistwidget qlistwidgetitem

QListWidgetItem* item要从a 中删除给定的,QListWidget* lst我可以使用以下代码(取自此答案):

delete lst->takeItem(lst->row(item)); // method 1
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我只是销毁该项目,它也会从列表中删除(至少它会从列表中消失QListWidget)。

delete item; // method 2
Run Code Online (Sandbox Code Playgroud)

QListWidget文档指示使用takeItem但没有提及任何有关删除该项目的信息(QListWidgetItem也没有任何信息)。

要从列表中删除项目,请使用 takeItem()。

takeItem使用方法一(然后删除)和方法二(直接删除)有什么区别吗?也许我错过了内存泄漏,未发出信号等?我的意思是,删除该项目(当然,如果您有的话)似乎比搜索它更容易。

Mik*_*ike 4

文档中的以下行回答了您的问题:

要从列表中完全删除项目(行),删除该项目使用takeItem()

这意味着获取该项目然后删除它或直接删除它没有区别。

takeItem()只是删除该项目的所有权,以便您有机会使用它做任何事情(也许在另一个项目中使用它QListWidget)。如果您只想删除该项目,则只需删除它即可,析构函数将负责删除所有权。