编辑模式下QTreeView委托中的持久文本

时间:2014-10-20 19:38:52

标签: c++ qt qtreeview

我正在使用带有默认委托的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();
}

1 个答案:

答案 0 :(得分:0)

您的模型应通过Qt::EditRole返回您希望在编辑器中看到的数据。如果数据无效(QVariant::isValid() == false),则编辑将通过Qt::DisplayRole请求数据。