Ich habe eine 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 eigentlichen Daten zu ändern): 02.01.2010
Ich weiß, dass ich eine QItemDelegate zu schaffen habe für diese Spalte, aber ich weiß nicht, wie ich die vorhandenen Daten lesen und mit etwas anderem überschreiben kann. Sie haben eine Idee, wie Sie das schaffen?Zeige andere Daten in QTableView mit QItemDelegate
6
A
Antwort
4
Ein Element Delegat ändert nicht unbedingt die Daten, es rendert nur die Daten. Wenn Sie Qt 4.4 oder neuer verwenden, schauen Sie sich stattdessen QStyledItemDelegate an - es ist themenbewusst und sieht besser aus.
Es gibt ein Beispiel für Elementdelegaten in this article (das scheint ein Spiegel der offiziellen Dokumentation zu sein, die jetzt nicht mehr existiert).
Da Sie wirklich nur den Text anpassen möchten, haben Sie in Erwägung gezogen, stattdessen ein Proxy-Modell zu verwenden und nur Ihren benutzerdefinierten QString für die DisplayRole der Datumsspalte zurückzugeben?
14
Die einfachste Lösung ist eine QStyledItemDelegate
Unterklasse zu erstellen und 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 reimplementieren -
setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Verwandte Themen
- 1. Farbe löscht die Daten in qtableview
- 2. So legen Sie Text für QLineEdit fest, wenn dieser als QItemDelegate mit QTableView verwendet wird
- 3. Qt - QTableView - Klickbare Schaltfläche in der Tabellenzeile
- 4. QTableView Sortiersignal?
- 5. Effizientes Aktualisieren eines QTableView mit hoher Geschwindigkeit
- 6. Aktualisieren von Daten auf QTableView von der Website (mit Unterbrechungen)
- 7. Datentabelle Daten in andere Daten
- 8. lesen QTableview ausgewählte Zeile QSQLITE-Datenbank
- 9. Qt: Checkbox & QItemDelegate - nicht malen Kontrollkästchen, wenn die Auswahl
- 10. PyQt - Wie setze ich QComboBox in einer Tabellenansicht mit QItemDelegate
- 11. Zeige Daten in angularjs in html Seite
- 12. QTableView Spaltenbreite
- 13. QTableView und setzen Zeigerposition
- 14. Zeige Spalte von max() andere Spalten
- 15. QTableView selectionChanged
- 16. Zeige andere Div auf Hover-Liste Element
- 17. Qt - Löschen von QTableView Inhalt
- 18. QTableView ausgewähltes Element in PyQt4
- 19. zeige alle Daten json in listview android
- 20. Zeige Daten von DB, Smarty
- 21. Zeige verschiedene Daten jeder Anfrage
- 22. Verwenden Sie QItemDelegate, um Miniaturbilder anzuzeigen
- 23. Mehrere Timer in QTableView aktualisieren
- 24. Zeige JSON-Daten in der Datagridview asp.net
- 25. Qt Spalte in QTableView ausblenden
- 26. Zeige eine andere HTML-Seite in meiner eigenen Seite
- 27. Passing Daten an andere Komponente
- 28. Schaltfläche zu QTableview hinzufügen
- 29. PySide + QTableView Beispiel
- 30. QTableView :: rect() und QTableView :: geometry() gibt keine genauen Ergebnisse
Entweder der Delegierte oder der Proxy-Modell in dieser Situation ziemlich gut funktionieren würde. Der Delegierte ist jedoch wahrscheinlich näher an dem, was beabsichtigt ist. –
mein Problem ist, dass ich nicht bekomme, wie man es mit einem QItemDelegate macht. die paint() - Methode funktioniert bei mir nicht – Berschi
Was ist das Problem mit paint()? – ChrisV