Fragen zu QListwidget



  • Morgen in die Runde,

    Ich habe ein paar Fragen zu QlistWidget (wer hätts gedacht).
    Tschuldigung für den allgemeinen Titel, mir ist nichts besseres eingefallen 🙄

    1. Bei welchem row-Index fängt die Liste an, bei 0 oder bei 1?

    2. Ich möchte ein neues Item in die Liste einfügen, wird der row/Listen-Index der nachfolgenden Items um 1 erhöht oder muss ich das selbst machen?

    3. Mit findItems() bekomme ich ja eine neue QWidgetList.
    Ich möchte die row des ersten (und einzigen) Elements der zurückgegebenen Liste bekommen und als Item an meine Liste anhängen.
    Mit

    myList->addItem(QString::number(myList->row(myList->findItems("Start",Qt::MatchExactly).begin())));
    

    funktioniert es nicht.

    4. Nach welchen Kriterien sortiert sortItems()?
    In meinem Testprogramm habe ich eine Liste mit 3 Strings, den Zahlen von 5-20 und 2 Items, die als Inhalt ein Widget mit je 2 Labels haben. Die Labels haben als Inhalt: Item 1: "Content1" und "10", Item2: "Content2" und "8".
    Die sortierte Liste hat am Anfang die beiden Items mit dem Widget, dann folgen die Zahlen (erst 10-20, dann 5-9), danach die Strings (Sortierung der Zahlen & Strings ist klar).

    4.1 Kann ich die Kriterien, nach denen sortiert wird, auf einfache Weise (z.B. Umleitung eines Signals in einen eigenen Slot) ändern?

    5. Ich möchte die Hintergrundfarbe des QListWidgets (nicht der QListWidgetITEMs) von weiß auf das Standard-Grau eines Widgets setzen.
    Ich habe es schon auf verschiedene Arten erfolglos probiert (der Code unter der Frage). Hängt das Design von dem verwendeten OS ab (bei mir Ubuntu mit Unity) oder lässt sich das auf andere Weise ändern? Bei einer Abhängigkeit vom OS muss ich doch ein Style-Sheet einsetzten oder?

    myList->setAutoFillBackground(true);
    myList->setBackgroundRole(this->backgroundRole());
    
    //-------------------------------------------------
    
    myList->setAutoFillBackground(true);
    myList->setPalette(this->palette());
    

    Das wären vorerst alle Fragen 🙂

    Viele Grüße
    Cherup



  • Müsste alles in der Doku stehen.



  • 1. Nein, hab dazu nichts gefunden.
    2. "Inserts the item at the position in the list given by row." Mehr steht dazu nicht.
    3. Finde ich nichts konkretes zu.
    4. In der Doku steht nur ob aufsteigend oder absteigend sortiert werden soll.
    4.1 Siehe 4.
    5. In der Doku steht nichts dazu, auch mit google hatte ich noch keinen Erfolg. Da dreht sichs immer nur um die Items, und das hab ich ohne Probleme hinbekommen.

    Zu 1: Ich nehme an, dass es bei 0 Anfängt, bin aber eben nicht sicher.
    Zu 2: Ich nehme auch hier an, dass ich mich nicht um die Erhöhung des Indexes kümmern muss, aber wenn ich ein Item bei 0 eingefügt habe, wurde es ans ende gepackt...



  • Zu 1 und 2: das ist intern einfach eine QList, verhält sich also völlig analog.

    zu 3: da muss ich genauso in die Doku schauen. Und was du geschrieben hast, schaut nicht falsch aus (nur etwas unsicher, man sollte natürlich prüfen, ob was gefunden wurde usw.). "Funktioniert nicht" ist keine hilfreiche Aussage. Debug da rein, schau dir an, was die einzelnen Funktionen zurückgeben.

    4. In der Doku zu QListWidgetItem steht schon drin, was beim Sortieren passiert. Du musst den < Operator überladen. Das sollte beide Fragen zum Sortieren beantworten?



  • Danke.

    Die Operator-überladung habe ich nicht gefunden oder übersehen.

    Zu 3.: Ich hätte es anders schreiben sollen, der Code wird nicht kompiliert, weil ....begin() einen iterator zurück gibt, mit dem row() nichts anfangen kann.



  • QList<T> haben auch eine first Funktion, das ist wahrscheinlich eher das, was du brauchst. Oder den Operator dereferenzieren, *begin().



  • Hi,

    Danke für die Hilfe, die .first()-Funktion hab ich echt vergessen, ich benutze sie so gut wie nie.
    Die Fragen 1-4 sind soweit gelöst. Die Sortierung ist jetzt anders implementiert, ich sortiere in einem vector die Werte des entsprechenden QLabels und füge so neue Items direkt in der passenden row ein.

    Bleibt nur noch das "Problem" mit dem Hintergrundfarbe ändern 🙂

    VG
    Cherup



  • Die Hintergrundfarbe kannst du so glaub nicht ändern. Entweder schreibst du ein eigenes Delegate, oder du benutzt Stylesheets.


Log in to reply