c++ - 删除 QListWidgetItem:QListWidget::takeItem(item) vs 删除项目

标签 c++ qt qlistwidget qlistwidgetitem

要从 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/

相关文章:

c++ - 像谷歌建议的例子

c++ - 将 valarray 显式初始化为零有歧义吗?

c++ - 为什么我的类节点会覆盖自身而不是创建新的节点对象

QT - QGridLayout 需要不同的标题行间距

c++ - QT:模拟单元测试

python - 是否可以让 QListWidget 选择多个 setCurrentItems

c++ - C++ 异常是否足以实现线程本地存储?

c++ - 编写插件系统?

Python3 : ImportError:/lib/x86_64-linux-gnu/libQt5Core. so.5:未找到版本 `Qt_5.15'

c++ - C++ Qt-读取文本文件的特定部分