edit: editing failed
错误可能是因为在 itemChanged
信号触发时尝试再次进入编辑状态会引发问题。这个问题通常是因为在 itemChanged
槽函数中重新触发了编辑逻辑。为了避免这种情况,使用一个定时器来延迟编辑操作,确保编辑是在 itemChanged
信号处理完毕之后才进行的。
void MainWindow::on_treeWidget_itemChanged(QTreeWidgetItem *item, int column)
{
if(item&&column==0){
QTimer::singleShot(0, this, [=]() {
ui->treeWidget->editItem(item,0);
});
}
}
QTimer::singleShot
是 Qt 提供的一个便利函数,用于在指定的时间间隔后执行一次性操作。它接受一个毫秒数、接收者对象以及一个槽函数作为参数。
毫秒数(0
):这是延迟的时间,以毫秒为单位。0
毫秒表示在当前事件循环处理完所有挂起的事件后立即执行。
- QTreeWidget: 直接提供
itemChanged
信号,当任何项的数据变化时发出。 - QTreeView: 使用模型的
dataChanged
信号,当模型中的数据变化时发出。你需要连接到模型(例如QStandardItemModel
或自定义模型)的dataChanged
信号。
断开信号与槽
disconnect(treeWidget, &QTreeWidget::itemChanged, receiver, member);
//阻止发出的所有信号
ui->treeWidget->blockSignals(true);