QTableView & nach Datum sortieren

Alles rund um die Programmierung mit Qt
Antworten
lefrosch
Beiträge: 15
Registriert: 9. Mai 2007 20:55

QTableView & nach Datum sortieren

Beitrag von lefrosch »

Hallo,
ich habe eine QTableView, welche aus der Datenbank mit sehr vielen Daten gefüllt wird. Unter anderem gibt es die Spalte Datum, welche folgendermaßen dargestellt wird: dd.MM.yyyy-Thh:mm:ss. Nun kann ich über den Header der Tabelle sortieren, was auch gut funktioniert. Nur beim Datum wird leider natürlich nach Tag, dann Monat usw. sortiert. Somit habe ich also keine richtige zeitliche Sortierung sondern z.B.:
1.3.2007
2.2.2006
4.5.2008
...

Ist es irgendwie "einfach" möglich dies zu ändern. Vor allem will ich nicht die Daten neu aus der Datenbank holen.
Ich bin noch c++ &qt neuling, also sorry, wenn ich mich manchmal dumm anstelle. Aber irgendwie muss ich das schaffen.
Danke.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ist das Datumsfeld auch ein Datumsfeld? Dann sollte die Sortierung auch richtig funktionieren. Ansonsten, muß du dir mit QSortFilterProxyModel was eigenes dazwischenbasteln....
lefrosch
Beiträge: 15
Registriert: 9. Mai 2007 20:55

Beitrag von lefrosch »

ja, ich habe es als Datumsfeld, welches ich aber dann ja zur richtigen (deutschen) Darstellung in einen String umwandeln muss. Oder geht das auch anders, dass er mir das Datum mit Zeit im "deutschen" Format darstellt?
Das mit dem QSortFilterProxyModel ist glaub ich zu hoch für mich...
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag von Zandru »

du könntest nach der "originalspalte" mit dem Datumsfeld sortieren und um trotzdem deutsche Darstellung zu haben eine weitere spalte mit Strings einfügen, und die originalspalte einfach nur verstecken - setColumnHidden(...)

Gruß,
Zandru
lefrosch
Beiträge: 15
Registriert: 9. Mai 2007 20:55

Beitrag von lefrosch »

danke. hab ich mir auch schon überlegt. aber wie mach ich es dann, dass wenn ich in den header der "deutschen" datumsspalte die versteckte sortiere?
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag von Zandru »

hmm, vielleicht sollte man einen hack nicht mit einem weiteren hack fixen ;)

schonmal QLocale angeschaut?

QLocale::setDefault(QLocale::German); // irgendwo ganz oben ins main()
lefrosch
Beiträge: 15
Registriert: 9. Mai 2007 20:55

Beitrag von lefrosch »

bringt keine Änderung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ansonsten könnte man es noch mit einem eigenen QItemDelegate machen. (Die Darstellung nicht die Sortierung)
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag von Zandru »

schade :oops: eigentlich verwunderlich, dass es da noch keinen Mechanismus in Qt gibt, aber ich glaube upsala hat recht - ein eigener Delegate für die Darstellung (mit überladenem paint) ist wohl das Beste.
lefrosch
Beiträge: 15
Registriert: 9. Mai 2007 20:55

Beitrag von lefrosch »

hilfe, muss das so kompliziert sein?

ich habe eine liste, die ich durchgehe um mein view aufzubauen:

Code: Alles auswählen

resultmodel = new QStandardItemModel(stlList.size(), 6);
...
{
...
QStandardItem* changedDateItem = new QStandardItem();
			
changedDateItem->setData(getLastChangedDate().toString(dateFormat), Qt::DisplayRole);
resultmodel->setItem(j, 5, changedDateItem);
j++;
i.next();
}
resultmodel->setHeaderData(...	
...
resultmodel->setHeaderData(5, Qt::Horizontal, tr("Geändert am"));
ui.tableViewResult->setModel(resultmodel);
ich habs auch mal versucht mit dem signal auf den header, aber irgendwie mag es die funktion nicht aufrufen. es reagiert einfach nicht:

Code: Alles auswählen

connect(ui.tableViewResult->horizontalHeader(),SIGNAL(sectionClicked(int)),this,SLOT(meinefunktion(int)));
hier mein Ausschnitt. Ich bin zu neu im geschäft um dieses Problem lösen zu können, leider. Vielleicht hat jemand die Zeit ... ka...
lefrosch
Beiträge: 15
Registriert: 9. Mai 2007 20:55

Beitrag von lefrosch »

ok, ich habs jetzt hinbekommen über eine versteckte spalte und einem connect auf den headerklick.
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag von Zandru »

also ich hab nun nochmal selber getestet:

QLocale::setDefault(QLocale::German);

funktioniert bei mir wunderbar. allerdings sollte man es wohl ausführen, bevor irgendein anderer Qt-Code ausgeführt wird. - Also noch vor QApplication...
Antworten