如果为空

时间:2018-05-18 10:21:26

标签: c++ qt qt4

我正在使用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()未被调用(预期),而(空)项目是没有删除。

在这种情况下如何删除项目?

1 个答案:

答案 0 :(得分:1)

您可以连接到代理的closeEditor信号而不是commitData信号:编辑器关闭时会发出closeEditor信号,无论是否有任何新数据输入到模型与否。