Frage

Ich habe einen QTableView mit einem QSqlTableModel verbunden.
In der ersten Spalte gibt es nur Termine in diesem Format: 2010-01-02
Ich mag diese Spalte das Datum in diesem Format zeigen (aber ohne die realen Daten zu ändern): 02.01.2010
Ich weiß, dass ich eine QItemDelegate für diese Spalte erstellen, aber ich weiß nicht, wie ich die vorhandenen Daten lesen und überschreiben Sie es mit etwas anderes. Sie haben keine Ahnung, wie das verwalten?

War es hilfreich?

Lösung

Ein Element Delegat nicht unbedingt die Daten ändern, es macht nur die Daten. Auch, wenn Sie sind Qt 4.4 oder höher verwenden, sehen Sie QStyledItemDelegate statt -. es ist Thema bewusst und schöner aussehen

Es ist ein Beispiel für Artikel Delegierten in diesem Artikel (das scheint ein Spiegel der offiziellen Dokumentation zu sein, die jetzt oder gegangen ist).

Da alles, was Sie wirklich wollen, ist, den Text anpassen, haben Sie darüber nachgedacht, ein Proxy-Modell statt und nur Ihr benutzerdefiniertes QString für das Datum Spalt DisplayRole Rückkehr?

Andere Tipps

Die einfachste Lösung ist eine QStyledItemDelegate Unterklasse zu erstellen und neu implementieren displayText(...) dh

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

Dann Ihrer Ansicht nach -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top