我正在使用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);
}
基于this comment,我正在收听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()
未被调用(预期),而(空)项目是没有删除。
在这种情况下如何删除项目?