2010-01-06 65 views
6

我有一個QTableView與QSqlTableModel連接。
在第一列,目前在格式僅日期:2010-01-02
我想這個欄,顯示在此格式的日期(但不改變真實數據):02.01.2010
我知道我必須創建一個QItemDelegate對於本專欄,但我不知道如何讀取現有數據並用不同的東西覆蓋它。你有任何想法如何管理?用QItemDelegate顯示QTableView中的其他數據

回答

4

一個item委託並不一定會改變數據,它只是呈現數據。另外,如果您使用的是Qt 4.4或更新的版本,請查看QStyledItemDelegate - 它是主題感知的,並且看起來更好。

有一個this article項目代表的例子(這似乎是正式文檔的鏡像,現在已經停止或消失)。

因爲你真正想要做的就是自定義文本,你有沒有考慮過使用代理模型,而只是返回日期列的DisplayRole的自定義QString?

+0

兩個委託或代理模式將在這種情況下工作得很好。但是,代表可能更接近於意圖的內容。 –

+0

我的問題是,我沒有得到如何使它與QItemDelegate。 paint() - 方法不適用於我 – Berschi

+0

具體來說,paint()的問題是什麼? – ChrisV

14

最簡單的解決方案是創建一個QStyledItemDelegate子類,並重新實現displayText(...)

class DateFormatDelegate : public QStyledItemDelegate 
{ 
public: 
DateFormatDelegate (QString dateFormat, QObject *parent = 0) : 
    QStyledItemDelegate(parent), 
    m_dateFormat(dateFormat) 
{ 
} 

virtual QString displayText(const QVariant & value, const QLocale & locale) const 
{ 
    Q_UNUSED(locale); 
    return value.toDate().toString(m_dateFormat); 
} 

private: 
QString m_dateFormat; 
}; 

然後在您的視圖 -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this)); 
相關問題