我有一个与 QSqlTableModel 连接的 QTableView。
在第一列中,只有这种格式2010-01-02
的日期:我希望此列以这种格式显示日期(但不更改真实数据):02.01.2010
我知道我必须为此列创建一个 QItemDelegate,但我没有不知道如何读取现有数据并用不同的东西覆盖它。你知道如何管理吗?
问问题
8432 次
2 回答
15
最简单的解决方案是创建一个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));
于 2010-02-16T22:26:39.253 回答
4
项目委托不一定会更改数据,它只是呈现数据。此外,如果您使用的是 Qt 4.4 或更新版本,请查看 QStyledItemDelegate ——它具有主题意识并且看起来更好。
在这篇文章中有一个项目委托的例子(这似乎是官方文档的镜像,现在已经关闭或消失了)。
由于您真正想要做的只是自定义文本,您是否考虑过使用代理模型并只为日期列的 DisplayRole 返回您的自定义 QString?
于 2010-01-06T13:30:29.377 回答