如果为空,则从 QListWidget 中删除可编辑项目

Remove editable item from QListWidget if empty

本文关键字:删除 编辑 项目 QListWidget 则从 如果      更新时间:2023-10-16

我正在使用Qt 4.8.6。

我有一个QListWidget.当用户单击">添加">按钮时,将在列表末尾插入一个新项目,并启动该项目文本的版本:

void slot_add_item()
{
auto* item = new QListWidgetItem(QString());
item->setFlags(item->flags() | Qt::ItemIsEditable);
listWidget->addItem(item);
listWidget->setCurrentItem(item);
listWidget->editItem(item);
}

基于此评论,我正在收听commitData信号,以便在用户完成编辑项目时捕获,并在项目的文本为空时将其删除:

connect(
listWidget->itemDelegate(), SIGNAL(commitData(QWidget*)),
SLOT(slot_item_edited(QWidget*)));
...
void slot_item_edited(QWidget* widget)
{
const QString path = reinterpret_cast<QLineEdit*>(widget)->text();
if (path.isEmpty())
delete listWidget->currentItem();
}

但是,这不会捕获用户使用 Escape 键取消编辑的情况:在这种情况下,不会(预期地(调用slot_item_edited(),也不会删除(空(项。

在这种情况下如何删除该项目的任何想法?

您可以连接到委托的closeEditor信号而不是commitData信号:当编辑器关闭时closeEditor信号,无论是否将任何新数据输入到模型中。