【问题标题】:Remove selected items from listWidget从 listWidget 中删除选定的项目
【发布时间】:2014-10-14 13:21:23
【问题描述】:

如何从QListWidget 中删除选定的项目?

我试过写下面的代码,但是没有用。

QList<QListWidgetItem*> items = ui->listWidget->selectedItems();
foreach(QListWidgetItem item, items){
    ui->listWidget->removeItemWidget(item);
}

【问题讨论】:

  • 为什么 item 不是指针?
  • @wuqiang:我已将item 更改为*item。但仍不想删除项目或任何项目。

标签: c++ qt qt5 qlistwidget


【解决方案1】:

从QListWidget 中删除项目的一种方法是使用QListWidget::takeItem 删除并返回该项目:

QList<QListWidgetItem*> items = ui->listWidget->selectedItems();
foreach(QListWidgetItem * item, items)
{
    delete ui->listWidget->takeItem(ui->listWidget->row(item));
}

另一种方式是qDeleteAll:

qDeleteAll(ui->listWidget->selectedItems());

【讨论】:

  • 好答案。请注意,此处qDeleteAll 的示例是说明性的……它仅删除在 UI 中选择的项目。 qDeleteAll(ui-&gt;listWidget-&gt;items()); 清除所有条目。一般来说,qDeleteAll(someListOfValidItems); 可以胜任。
  • 谢谢,但是第一种方式出现错误QModelIndex QListWidget::indexFromItem(QListWidgetItem*) const' is protected。
  • @LionKing 你是对的。你应该使用QListWidget::row。答案已更新。
  • @Youda008 removeItemWidget 仅删除项目上设置的小部件。要删除整行,您应该使用 takeItem 并将其删除以释放内存。见:doc.qt.io/qt-5/qlistwidget.html#removeItemWidget
  • @Nejat:这就是手册。但我不明白removes the widget set on the item 是什么意思。什么是widget set 或对set widget on the item 意味着什么??
【解决方案2】:

用removeItemWidget给出解决方案:

QList<QListWidgetItem*> items = ui->listWidget->selectedItems();

foreach(QListWidgetItem* item, items){
    ui->listWidget->removeItemWidget(item);
    delete item; // Qt documentation warnings you to destroy item to effectively remove it from QListWidget.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2014-02-11
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多