takeItem() von QListWidget verwenden

Alles rund um die Programmierung mit Qt
Antworten
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

takeItem() von QListWidget verwenden

Beitrag von nkc »

Hallo,
ich möchtem dem User meines Programmes ermöglichen, einzelne Zeilen aus dem QListWidget zu löschen.

Code: Alles auswählen

if (ret == QMessageBox::Yes)
            {
                 delete listWOpen->takeItem(listWOpen->item(i));
            }
Fehlermeldung:

Code: Alles auswählen

 invalid conversion from QListWidgetItem* to int
initializing argument 1 of QListWidgetItem* QListWidget::takeItem(int)
Die Varibale i ist in einer Schleife.
Die Methode item() erwartet doch ein int.
Deshalbt verstehe ich nicht warum es nicht funktioniert.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Du brauchst aber das Item.... und jetzt schau mal in der Doku nach welche Funktion dir ein QListWidgetItem * zurückliefert.... und dann hast es!
QListWidgetItem * QListWidget::item ( int row ) const
Returns the item that occupies the given row in the list if one has been set; otherwise returns 0.
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag von nkc »

Ist immer noch nich ganz klar.

Zurückgeliefert wird der Inhalt der Zeile i.
Falls nicht vorhanden, wird 0 zurückgeliefert.
Aber das Problem ist doch, dass das i vom Typ int nicht akzeptiert wird.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Das Problem ist, dass takeItem() keinen Item-Pointer (der wird dir von listWOpen->item(i) zurückgegeben), sondern einen int (=zeile) erwartet.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

stimmt ... shit
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Zeile wird nicht gelöscht

Beitrag von nkc »

Ich habe es folgnederweise versucht.

Code: Alles auswählen

if (ret == QMessageBox::Yes)
            {
                listWOpen->removeItemWidget(listWOpen->item(i));
            }
Jedoch wird die Zeile nicht entfernt, keine Ahnung warum nicht.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Was ist "i"? Und warum so kompliziert?

Da du wahrschenlich das aktuelle Item entfernen willst, was spricht gegen ein

Code: Alles auswählen

QListWidgetItem* i = listWOpen->takeItem( listWOpen->currentRow());
delete i;
oder

Code: Alles auswählen

QListWidgetItem i = listWOpen->currentItem();
listWOpen->removeItemWidget(i);
delete i;
oder
...
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag von nkc »

Es muss in einer Schleife sein.
In dem ListWidget sind Dateinamen.
Es wird geprüft, ob es sich um xml-Datei handelt.
Da alle einzeln geprüft werden müssen, habe ich eine Schleife benutzt.
i ist also ein int aus dieser Schleife.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Code: Alles auswählen


if (/* messageBox bla foo */)
{
   foreach (QListWidgetItem* item, listWidget->selectedItems())
   {
      if (/* item is xml */)
      {
         listWidget->removeItemWidget(item);
         delete item;
      }
   }
}
Ungetestet. Ausserdem versteh ich nich ganz was du tun willst.

[edit] vergiss es wieder, ich dachte die sollen manuell gewählt werden.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

nkc hat geschrieben:i ist also ein int aus dieser Schleife.
Und du erwartest, dass das i (Einfacher Zähler von 0 bis Max) auch automatisch dem currentRow entspricht? Anders lässt sich dein listWOpen->item(i) nicht erklären.
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag von nkc »

Was ich will ist eigentlich ganz eifach.
Irgendwas mach ich aber falsch.
Ich möchte removeItemWidget benutzen:
Das mache ich folenderweise:

Code: Alles auswählen

listWOpen->removeItemWidget(listWOpen->item(2));
Ich möchte also die 3.Zeile löschen.
Warum tut es das Programm nicht?
Antworten