You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt4.8.6中移除QListWidget空可编辑项(含ESC取消编辑场景)

解决Qt 4.8.6中QListWidget编辑按ESC取消后空项残留的问题

这个场景我之前处理过,确实commitData信号只会在用户确认编辑(比如回车、点击界面其他区域)时触发,ESC取消编辑的情况它是不会响应的。要覆盖这种场景,我们可以利用QAbstractItemDelegate提供的closeEditor信号——这个信号不管编辑器是提交还是取消关闭,都会触发,而且还会携带一个EndEditHint参数,能让我们区分不同的关闭原因。

具体实现步骤:

  1. 首先在初始化代码里添加closeEditor信号的连接:
connect(listWidget->itemDelegate(), 
        SIGNAL(closeEditor(QWidget*, QAbstractItemDelegate::EndEditHint)),
        this, 
        SLOT(slot_editor_closed(QWidget*, QAbstractItemDelegate::EndEditHint)));
  1. 实现处理编辑器关闭的槽函数:
void slot_editor_closed(QWidget* widget, QAbstractItemDelegate::EndEditHint hint) {
    // 当用户按ESC取消编辑时,hint的值会是RevertModelChanges
    if (hint == QAbstractItemDelegate::RevertModelChanges) {
        QListWidgetItem* currentItem = listWidget->currentItem();
        // 确认当前项存在且文本为空(就是我们刚添加的那个空项)
        if (currentItem && currentItem->text().isEmpty()) {
            delete currentItem;
        }
    }
}

方案说明:

  • closeEditor信号覆盖了编辑器关闭的所有场景,包括ESC取消、提交编辑、焦点丢失等;
  • 通过EndEditHint::RevertModelChanges枚举值,能精准捕获用户取消编辑的操作;
  • 结合你之前的commitData逻辑,现在不管是用户提交空文本,还是取消编辑,空项都会被自动移除,完全覆盖了所有边界情况。

内容的提问来源于stack exchange,提问作者François Beaune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:26:42