Я использую 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()
не вызывается (как ожидается) и (пустой) элемент не удаляется.
Любая идеяо том, как убрать предмет в таком случае?