Постоянный текст в делегате 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 ответ

Решение

Ваша модель должна возвращать данные, которые вы хотите видеть в редакторе, через Qt::EditRole, Если данные неверны (QVariant::isValid() == false) тогда редактор запросит данные через Qt::DisplayRole,

Другие вопросы по тегам