Seite 1 von 1

Frage zum sortieren QTableWidget

Verfasst: 7. März 2012 10:47
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

Re: Frage zum sortieren QTableWidget

Verfasst: 7. März 2012 11:04
von Christian81
Einfach von QTableWidgetItem ableiten und eine eigene operator<() - Funktion schreiben.
Siehe http://doc.trolltech.com/4.7/qtablewidg ... perator-lt

Re: Frage zum sortieren QTableWidget

Verfasst: 7. März 2012 12:46
von RobRoy1304
Ok, danke. Muss ich mal probieren.

Re: Frage zum sortieren QTableWidget

Verfasst: 8. März 2012 18:39
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;
     }
 };

Re: Frage zum sortieren QTableWidget

Verfasst: 9. März 2012 06:36
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...