【发布时间】:2018-10-28 18:23:37
【问题描述】:
我使用的是 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() 不会被调用(预期)并且(空)项目不会被删除.
知道在这种情况下如何删除该项目吗?
【问题讨论】:
-
您可能会尝试连接到代理的closeEditor 信号。
-
@Dmitry 完美运行,谢谢!对我的代码的唯一更改是绑定到
closeEditor而不是commitData。如果您创建答案,我会将其标记为已接受。 -
很高兴它有帮助,将其发布为答案。