Qt - Sortierung der Spalten
-
Hi Leute,
ich schreibe im Moment ein Programm und habe zig Tabellen, bis jetzt habe ich die Spaltenreihenfolge immer fix vorgegeben (in der SQL-Anweisung) die dann natürlich auch dementsprechend in dem QTableWidget eingefügt und eingehalten wurden.
Ich möchte aber jetzt das der Benutzer die Möglichkeit haben soll, die Spalten beliebig zu vertauschen. (So wie man das aus fast jedem Programm kennt)
Mein Problem daran ist, das ich mich bei einigen Slots und auch einigen Berechnungen auf fixe Spalten ( z. B. Column = 2 etc.) beziehe. Das kann ich aber nicht wenn der Benutzer diese Vertauschen kann.
Habt ihr vielleicht Tipps und Anregungen wie ich das am Effektivsten umsetzten kann bzw. ob es überhaupt "variabel" gehalten werden kann?
Würde mich über Antworten sehr freuen.
Gruß
Rudi G
-
Mein Problem daran ist, das ich mich bei einigen Slots und auch einigen Berechnungen auf fixe Spalten ( z. B. Column = 2 etc.) beziehe. Das kann ich aber nicht wenn der Benutzer diese Vertauschen kann.
Eifnach nicht auf die ID der Kolumne beziehen, sondern zum Beispiel über deren Namen ansprechen. In etwa so (pseudo-code) :
if ( column -> GetName() ) { DoNastyBugs(); }
HTH.
rya.
-
[quote="scorcher24@arbyte"]
if ( column -> GetName() == _T("FooBar") ) { DoNastyBugs(); }
Sorry für den Spam, hab was vergessen im code
rya.
-
Hi,
vielen Dank für Antwort und diesen Ansatz.
scorcher24@arbyte schrieb:
if ( column -> GetName() == _T("FooBar") ) { DoNastyBugs(); }
Bei diesem Ansatz müsste ich ja dann immer mit einer Schleife alle Spalten durchlaufen und um dann ggf. nach den Spaltennamen zu suchen.
Ich habe es noch nicht probiert aber ich nehme an das es bei 6000 Zeilen und 10-15 Spalten (also 6000*10) also bei 60.000 Durchläufe bei jedem Aktualisieren/Bearbeiten und bei bei so vielen (10-15) if oder switch-Überprüfungen einfach zu langsam sein wird und dann mein Programm nicht mehr Performant arbeiten kann.
Oder irre ich mich da (wie gesagt ich habe keine Erfahrung damit und sitze im Moment nicht an einem Rechner an dem ich es probieren könnte).
Gruß
Rudi Gedit://
Ich habe sehr viele Tabellen die über ein und den selben QTableWidget angezeigt werden (je nachdem was für Einstellungen/Optionen der Benutzer trift). Das würde aber nicht mehr funktionieren wenn ich die Spaltennamen von vorne rein festlegen würde.Und bei jeder Aktualisierung (per Select) würden die Spalten wieder in ihrem Urzustand sortiert werden, es seiden ich codiere die Namen für die Spalten in den Code ein, damit zerstöre ich mir aber die Möglichkeit verschiedene Tabellen über ein und den Selben "Grid" anzuzeigen.
-
columnMoved ueberladen und ein Array anlegen, das zu jedem Ursprungsindex den tatsaechlichen Spaltenindex enthaelt.
Alternativ das Model/View-Konzept in Betracht ziehen.
-
hellihjb schrieb:
columnMoved ueberladen und ein Array anlegen, das zu jedem Ursprungsindex den tatsaechlichen Spaltenindex enthaelt.
Da ich bis zum 15.01.2009 eine Release-Version an meinen Auftraggeber rausschicken muss, wird das wohl im Moment die einfachste Lösung sein.
hellihjb schrieb:
Alternativ das Model/View-Konzept in Betracht ziehen.
Aber damit wollte ich mich mal immer wieder auseinandersetzen, aber bis jetzt hat mir immer wieder die Zeit dafür nicht ausgereicht. Aber für die nächste Version werde ich das wohl oder übel angucken und auch anwenden.
Hast du dich schon mal damit auseinander gesetzt? Wenn ja ist es schwer zu erlernen bzw. zu verstehen und anzuwenden?
Vielen Dank für die Hilfe.
Gruß
Rudi G
-
das mit dem Array speichern ist nicht noetig, das macht Qt bereits selbst.
hol dir einfach den horizontalen Header der View (
->horizontalHeader()
). Der bietet dir die Methodeint logicalIndex( int visualIndex )
. Gibst du der eine Spaltennummer mit, liefert sie dir die eigentliche Spaltenposition zurueck, egal, wie oft davor sortiert wurde
-
Danke, das bezieht sich aber auf TableView (dann müsste ich das Model-Konzept benutzen), oder?
Gruß
Rudi G
-
Rudi G schrieb:
Danke, das bezieht sich aber auf TableView (dann muesste ich das Model-Konzept benutzen), oder?
Gruss
Rudi GQTableWidget ist von QTableView abgeleitet.
Wenn du das MVC-Konzept nutzen wuerdest, wuerde ich dir zu nem Proxymodel raten
-
zwutz schrieb:
QTableWidget ist von QTableView abgeleitet.
Wenn du das MVC-Konzept nutzen wuerdest, wuerde ich dir zu nem Proxymodel raten
Vielen Dank, damit werde ich mich dann als nächstes Beschäftigen (auch Beruflich)
Gruß
Rudi G