使用QItemDelegate在QTableView中显示其他数据

Ber*_*chi 6 c++ qt qt4 qtableview qitemdelegate

我有一个QTableView与QSqlTableModel连接.
在第一列中,只有这种格式的日期:2010-01-02
我希望此列以此格式显示日期(但不更改实际数据):02.01.2010
我知道我必须为此列创建一个QItemDelegate,但我不知道我知道如何读取现有数据并用不同的东西覆盖它.你知道如何管理它吗?

小智 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;
};
Run Code Online (Sandbox Code Playgroud)

然后在你看来 -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Run Code Online (Sandbox Code Playgroud)


Chr*_*isV 4

项目委托不一定会更改数据,它只是呈现数据。另外,如果您使用的是 Qt 4.4 或更高版本,请查看 QStyledItemDelegate ——它具有主题感知功能并且看起来会更好。

本文中有一个项目委托的示例(这似乎是现已关闭或消失的官方文档的镜像)。

由于您真正想做的只是自定义文本,因此您是否考虑过使用代理模型并仅返回日期列的 DisplayRole 的自定义 QString?