Seite 1 von 1
Inhalt ListWidget löschen
Verfasst: 23. Februar 2009 17:52
von nkc
Hallo,
ich benutze ein QListWidget und habe dort ein paar Zeilen Text stehen.
Nun möchte ich mit einem QPushButton die aktuelle (angeklickte) Zeile löschen. Um das zu Realisieren habe ich folgendes getestet.
und
Das Problem ist, dass der Parameter aus dem Datentyp int sein soll.
Ich möchte diesen jedoch nicht fest vorgeben, denn es soll ja die angeklickte Zeile (current) gelöscht werden.
Hat jemand eine Idee? Danke.
Verfasst: 23. Februar 2009 18:03
von nkc
Hallo,
das Problem habe ich folgendermaße gelöst:
Warum kann man aber die angeklickte Zeile nicht mit der Tastaturtaste entf löschen? Ich habe leider in Doku nichts gefunden.
Verfasst: 23. Februar 2009 18:10
von dontinelli
Dazu musst du den KeyPressEvent des ListWidget (von welchem du eine eigene Klasse ableiten musst) anpassen. Suche in der Doku mal danach, da solltest du etwas finden.
Verfasst: 23. Februar 2009 19:26
von franzf
dontinelli hat geschrieben:Dazu musst du den KeyPressEvent des ListWidget (von welchem du eine eigene Klasse ableiten musst) anpassen.
Nicht zwingend, mit eventFilter geht das auch.
Verfasst: 23. Februar 2009 23:39
von solarix
nkc hat geschrieben:Hallo,
das Problem habe ich folgendermaße gelöst:
...
Ich gehe davon aus, dass du da
Code: Alles auswählen
delete listWSelected->takeItem(listWSelected->currentRow());
geschrieben hast, weil du ja in der Doku bestimmt gelesen hast, dass das Item noch manuell gelöscht werden muss...
Verfasst: 24. Februar 2009 08:13
von dontinelli
@franzf: Hast natürlich recht, mit EventFilter geht es auch.
Alternativ zum Vorschlag von solarix könntest du auch folgendes schreiben
Code: Alles auswählen
listWSelected->removeItemWidget(listWSelected->currentItem());
Damit übernimmt Qt das Löschen des Items. Keine Ahnung, ob das eine oder andere besser geeignet ist (Performance etc.).
eventFilter
Verfasst: 24. Februar 2009 10:22
von nkc
Also das klappt ganz gut:
Code: Alles auswählen
delete listWSelected->takeItem(listWSelected->currentRow());
Aber mit dem eventFilter kann ich nichts anfangen.
Wo finde ich den und wie kann ich diesen implementieren?
Verfasst: 24. Februar 2009 11:18
von dontinelli
Verfasst: 24. Februar 2009 11:31
von nkc
Danke.
Noch eine Frage:
Ich möchte überprüfen, ob in dem QListWidget eine Zeile angeklickt ist.
Wenn keine angeklickt ist gibt es eine Fehlermeldung mitteil QMessageBox.
Leider finde ich aber im QListWidget keine Methode, die einen boolschen Wert zurückgibt.
Wie kann ich das dann prüfen?
Verfasst: 24. Februar 2009 11:45
von dontinelli
Frage doch currentRow() ab. Sollte auf -1 sein, wenn nichts angewählt ist. Jenachdem kannst du auch selectedItems() aufrufen und die Anzahl der Listeneinträge überprüfen. Kommt drauf an, was du für einen Selektionsmodus eingestellt hast.
Verfasst: 24. Februar 2009 12:00
von nkc
Das tut genau das, was ich wollte. Vielen Dank.
Ich habe die ganze Zeit nach einer Methode gesucht,
die true oder false zurückliefert.
Wie kann ich das aber der Dokumentation entnehmen.
Dort steht nichts von -1 geschrieben, oder?
Ich habe hier nachgeschaut:
http://web.mit.edu/qt-dynamic/www/qlist ... ntRow-prop
Verfasst: 24. Februar 2009 12:04
von dontinelli
Hast recht, dort steht es nicht. Bei anderen Widgets ist es jedoch so beschrieben. Funktionen mit Pointern als Rückgabewerdte geben in solchen Fällen einen Null-Pointer zurück und solche mit int eine -1. Und Count/Size natürlich 0.
Ich hoffe mal, diese Verallgemeinerung stimmt *g*.
Ich bin auf jeden Fall immer gut verfahren damit...