2014-10-20 73 views
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(); 
} 
+2

檢查你的模型返回爲'Qt :: EditRole' – 2014-10-20 20:02:58

+0

不太確定你的意思。 Qt :: EditRole在我的調試窗口中評估爲「0n2」,但它應該是一個常量值,不依賴於我的模型。 – Carlton 2014-10-20 20:12:03

+0

你的模型應該通過'Qt :: EditRole'返回一個數據,你想在ediitor中看到。如果數據無效('QVariant :: isValid()== false'),那麼編輯器將通過'Qt :: DisplayRole'請求數據。 – 2014-10-21 08:03:07

回答

0

你的模型應該返回數據,要在ediitor看到,通過Qt::EditRole。如果數據無效(QVariant::isValid() == false)則編輯器將通過Qt::DisplayRole請求數據。