QListWidget调用editItem()提示“edit: editing failed”无法编辑新增项
解决QListWidget调用editItem()失败的问题
这个问题我之前也碰到过!控制台输出的“edit: editing failed”其实是在提示你:当前的列表项不允许被编辑。
问题根源
默认情况下,QListWidgetItem的权限标志(flags)只包含Qt::ItemIsSelectable和Qt::ItemIsEnabled,缺少Qt::ItemIsEditable标志——这就导致即使你调用了editItem(),系统也会拒绝进入编辑状态。
修复方案
只需要在添加新项后,给它加上可编辑的权限标志即可。下面是修改后的完整代码:
Sequencer::Sequencer(QWidget* parent) : QWidget(parent) { m_list = new QListWidget(); m_addButton = new QPushButton("Add Step"); m_removeButton = new QPushButton("Remove Step"); connect(m_addButton, &QPushButton::clicked, this, [&]() { // 添加空项 m_list->addItem(""); // 获取刚添加的项 QListWidgetItem* newItem = m_list->item(m_list->count() - 1); // 给项添加可编辑权限 newItem->setFlags(newItem->flags() | Qt::ItemIsEditable); // 选中该项并进入编辑状态 m_list->setCurrentItem(newItem); m_list->editItem(newItem); }); connect(m_removeButton, &QPushButton::clicked, this, [&]() { if (!m_list->selectedItems().isEmpty()) { qDeleteAll(m_list->selectedItems()); } }); QHBoxLayout* hLayout = new QHBoxLayout(); hLayout->addStretch(); hLayout->addWidget(m_addButton); hLayout->addWidget(m_removeButton); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->addWidget(m_list); vLayout->addLayout(hLayout); setLayout(vLayout); }
额外优化
如果你希望所有列表项都默认支持编辑,也可以在初始化m_list时全局设置编辑触发器(这样用户双击项也能进入编辑状态):
m_list->setEditTriggers(QAbstractItemView::AllEditTriggers);
不过这一步是可选的,核心的修复还是给新增项添加Qt::ItemIsEditable标志。
内容的提问来源于stack exchange,提问作者Dnarok
相关产品推荐
相关产品推荐

