我正在使用带有默认委托的QTreeView
来显示可编辑的模型数据。当我在要更改的字段上双击或按F2时,我会看到文本编辑框,但在编辑器出现时会删除现有文本。我希望现有文本保持但被选中。 Qt文档中的“可编辑树模型”示例完全具有此行为,但是我不能为我的生活弄清楚它是如何完成的。据我所知,该示例不使用自定义委托,并且没有与我可以找到的委托行为相关的调用。这可以在没有自定义委托的情况下完成吗?
编辑:这是重新实现的QAbstractItemModel::data()
的代码:
QVariant projectModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
node* item = static_cast<node*>(index.internalPointer());
if (role == Qt::DisplayRole)
return QVariant(item->data(index.column()).c_str());
else if (role == Qt::ForegroundRole)
return item->text_color(index.column());
else if (role == Qt::BackgroundRole)
return item->background_color(index.column());
else if (role == Qt::CheckStateRole)
return item->check_state(index.column());
else if (role == Qt::DecorationRole)
return item->icon(index.column());
else if (role == Qt::TextAlignmentRole)
return item->text_alignment(index.column());
else
return QVariant();
}
答案 0 :(得分:0)
您的模型应通过Qt::EditRole
返回您希望在编辑器中看到的数据。如果数据无效(QVariant::isValid() == false)
,则编辑将通过Qt::DisplayRole
请求数据。