Frage zum sortieren QTableWidget

Alles rund um die Programmierung mit Qt
Antworten
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Frage zum sortieren QTableWidget

Beitrag von RobRoy1304 »

mein Problem ist das beim Sortieren von Spalten das die Inhalte der Zeichenketten von vorne nach hinten verglichen werden, ohne die Länge zu berücksichtigen.
Bei Textinhalten macht dieses absolut Sinn, z.b. "Aal, Besen,CI" oder umgedreht, je nach Richtung. Aber bei Zahlen eben nicht, z.b. "151,2,31455,456".

Meine Frage ist nun, ob mann dieses mit Hilfe einer Standartmethode von QTableWidget in Abhängigkeit einer Spaltennummer ändern kann? So das bei Zahleninhalten
eine Reihenfolge wie z.b. "2,151,456,31455" sortiert wird. Oder muss ich eine eigene Klasse erstellen die von QTableWidget erbt und die betreffende Sortiermethode
überschreiben? Wenn ja wie heisst diese Methode. Danke im voraus.

MfG
RobRoy
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Frage zum sortieren QTableWidget

Beitrag von Christian81 »

Einfach von QTableWidgetItem ableiten und eine eigene operator<() - Funktion schreiben.
Siehe http://doc.trolltech.com/4.7/qtablewidg ... perator-lt
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Re: Frage zum sortieren QTableWidget

Beitrag von RobRoy1304 »

Ok, danke. Muss ich mal probieren.
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Re: Frage zum sortieren QTableWidget

Beitrag von RobRoy1304 »

So habs hinbekommen, danke nochmal.

Da ich in einigen Spalten Zahlenwerte mit Text habe, z.B. "22 Stk.", splite ich die Texte erst einmal. Danach versuch ich den ersten Teil des jeweiligen Textes
zum double zu casten(benötige ich, da auch Komma-Werte vorkommen können). Dann vergleiche ich ob beide Werte Zahlen sind, wenn ja dann vergleiche
ich nur double<double. Sonst wird die Grundmethode operator < von QTableWidgetItem zum Vergleich genommen.

MfG
RobRoy

Code: Alles auswählen

class CMyTableWidgetItem: public QTableWidgetItem
 {
 public:
     bool operator< ( const QTableWidgetItem & other ) const
     {
         double d1,d2;
         QStringList ls;
         bool b1,b2,bReturn=false;
         QString s1=this->text();
         QString s2=other.text();
         //-
         ls=s1.split(" ");
         if(ls.count()>0)
            s1=ls[0];
         ls.clear();
         ls=s2.split(" ");
         if(ls.count()>0)
            s2=ls[0];
         ls.clear();
         //-
         d1=s1.toDouble(&b1);
         d2=s2.toDouble(&b2);
         //-
         if(b1==true && b2==true)//2* number?
         {
             if(d1<d2)
                 bReturn=true;
             else{}
         }
         else
             bReturn=QTableWidgetItem::operator<(other);

         //-
         return bReturn;
     }
 };
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Frage zum sortieren QTableWidget

Beitrag von Christian81 »

Du brauchst doch nur deine Spalten, welche Du nach deiner Methode sortieren willst, mit dem Typ CMyTableWidgetItem zu erstellen. Der Rest kann doch einfache QTableWidgetItems sein. Und wenn Du noch einen eigenen ctor baust und Du dir die Values direkt als Member vom Typ bool merkst, ists auch schnell wenn mal mehr als 10 Zeilen zu sortieren sind...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten