2010-01-06 35 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)); 
相关问题