Qt4.8.6中移除QListWidget空可编辑项(含ESC取消编辑场景)
解决Qt 4.8.6中QListWidget编辑按ESC取消后空项残留的问题
这个场景我之前处理过,确实commitData信号只会在用户确认编辑(比如回车、点击界面其他区域)时触发,ESC取消编辑的情况它是不会响应的。要覆盖这种场景,我们可以利用QAbstractItemDelegate提供的closeEditor信号——这个信号不管编辑器是提交还是取消关闭,都会触发,而且还会携带一个EndEditHint参数,能让我们区分不同的关闭原因。
具体实现步骤:
- 首先在初始化代码里添加
closeEditor信号的连接:
connect(listWidget->itemDelegate(), SIGNAL(closeEditor(QWidget*, QAbstractItemDelegate::EndEditHint)), this, SLOT(slot_editor_closed(QWidget*, QAbstractItemDelegate::EndEditHint)));
- 实现处理编辑器关闭的槽函数:
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
相关产品推荐
相关产品推荐

