0
我正在使用QTreeView
與默認委託來顯示可編輯模型數據。當我雙擊或在要更改的字段上按F2時,我會看到文本編輯框,但編輯器出現時現有文本會被刪除。我希望現有的文本保持不變,但已被選中。 Qt文檔中的「可編輯樹模型」示例恰好具有這種行爲,但是我不知道它是如何實現的。就我所知,該示例不使用自定義委託,並且沒有與我可以找到的委託行爲相關的調用。這可以在沒有自定義委託的情況下完成嗎?編輯模式下QTreeView委託中的持久文本
編輯:這是我的代碼,重新實現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();
}
檢查你的模型返回爲'Qt :: EditRole' – 2014-10-20 20:02:58
不太確定你的意思。 Qt :: EditRole在我的調試窗口中評估爲「0n2」,但它應該是一個常量值,不依賴於我的模型。 – Carlton 2014-10-20 20:12:03
你的模型應該通過'Qt :: EditRole'返回一個數據,你想在ediitor中看到。如果數據無效('QVariant :: isValid()== false'),那麼編輯器將通過'Qt :: DisplayRole'請求數據。 – 2014-10-21 08:03:07