6

QSqlTableModel に接続された QTableView があります。
最初の列には、この形式の日付のみがあります:2010-01-02
この列にこの形式で日付を表示したい (ただし、実際のデータは変更しません):02.01.2010
この列の QItemDelegate を作成する必要があることはわかっていますが、作成しません。既存のデータを読み取って別のもので上書きする方法がわかりません。それを管理する方法はありますか?

4

2 に答える 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 に答える