2015-04-07 74 views
0

項目的定義格式我已經擁有與QDate項目,如Qt::DisplayRole/Qt::EditRole的典範。 它工作正常 - 查看呈現這些項目正確,並提供不錯的日期編輯器。唯一的缺點是我想改變顯示的日期格式。的Qt:模型/視圖 - 中保存日期

是否有簡單的方式比準備委託與自定義繪畫+ QItemEditorFactory + QItemEditorCreatorBase等?

它尋找我喜歡形式勝過內容的勝利。

+1

你需要一個編輯器,或者你只需​​要顯示不同格式的文本? –

+0

你能給我們一個最小的代碼示例來使用嗎? – DaveyLaser

+0

@SaZ:我需要:以特定格式顯示文本(日期實際),然後以特定格式編輯(yyyy-MM-dd是我的目標)。據我可以在文檔中找到我需要準備自定義委託和所有這些創建編輯器+編輯器本身(簡單的QDateEdit與我提到的格式)。 –

回答

1

如果你只需要顯示在特定細胞的日期,你應該繼承QStyledItemDelegate,並覆蓋它的QString displayText(const QVariant& value, const QLocale& locale) const;

class DateItemDelegate : 
    public QStyledItemDelegate 
{ 
public: 
    DateItemDelegate (QObject* parent) : 
     QStyledItemDelegate(parent) {}; 


    QString displayText(const QVariant& value, const QLocale& locale) const 
    { 
     if (value.type() == QVariant::DateTime) 
     { 
      return value.toDateTime().toString(Qt::ISODate); 
     } 
    } 
}; 

至於我,你應該使用自定義的畫如果你想在一個單元格中顯示多個數據。

+0

這就是我試圖避免:)我還需要準備將與特定格式QDateEdit自定義編輯器。但是,如果沒有其他辦法... –

+0

替換文本(無編輯)另一種方式是寫自己的'QIdentityProxyModel'。 Imo,最好在模型中重寫'data'方法,而不是委託。 –

+0

@SaZ如果你的意思是覆蓋數據,所以它返回字符串instad日期時間然後排序將工作不正確。這樣的項目代表不會影響排序。 –

0

Thx爲所有評論。

總結:沒有辦法做到這一點無需自定義委託