Question

J'ai un QTableView connecté à un QSqlTableModel.
Dans la première colonne, il y a des dates que dans ce format: 2010-01-02
Je veux que cette colonne pour afficher la date à ce format (mais sans changer les données réelles): 02.01.2010
Je sais que je dois créer un QItemDelegate pour cette colonne, mais je ne sais pas comment je peux lire les données existantes et le remplacer par quelque chose de différent. Vous avez une idée comment gérer cela?

Était-ce utile?

La solution

Un délégué de l'article ne change pas nécessairement les données, il rend juste les données. De plus, si vous utilisez Qt 4.4 ou plus récent, regardez QStyledItemDelegate au lieu -. Il est le thème conscient et plus joli

Il y a un exemple de délégués d'article dans cet article (qui semble être un miroir de la documentation officielle qui est maintenant vers le bas ou parti).

Depuis tout ce que vous voulez vraiment faire est de personnaliser le texte, avez-vous pensé à utiliser un modèle de procuration à la place et juste retourner votre QString personnalisé pour DisplayRole de la colonne date?

Autres conseils

La solution est de créer une sous-classe de QStyledItemDelegate et le plus simple réimplémentez displayText(...) ie

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;
};

Alors, selon vous -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top