Удалить редактируемый элемент из QListWidget, если он пуст - PullRequest
0 голосов
/ 18 мая 2018

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

Любая идеяо том, как убрать предмет в таком случае?

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете подключиться к closeEditor сигналу делегата вместо commitData сигнала: closeEditor сигнал испускается при закрытии редактора независимо от того, были ли введены какие-либо новые данные в модель илинет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...