Seite 1 von 1
takeItem() von QListWidget verwenden
Verfasst: 16. März 2009 09:47
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.
Verfasst: 16. März 2009 09:53
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.
Verfasst: 16. März 2009 10:02
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.
Verfasst: 16. März 2009 10:13
von pfid
Das Problem ist, dass takeItem() keinen Item-Pointer (der wird dir von listWOpen->item(i) zurückgegeben), sondern einen int (=zeile) erwartet.
Verfasst: 16. März 2009 10:28
von AuE
stimmt ... shit
Zeile wird nicht gelöscht
Verfasst: 16. März 2009 12:40
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.
Verfasst: 16. März 2009 12:51
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
...
Verfasst: 16. März 2009 13:40
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.
Verfasst: 16. März 2009 14:02
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.
Verfasst: 16. März 2009 14:13
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.
Verfasst: 16. März 2009 14:19
von nkc
Was ich will ist eigentlich ganz eifach.
Irgendwas mach ich aber falsch.
Ich möchte removeItemWidget benutzen:
Das mache ich folenderweise:
Ich möchte also die 3.Zeile löschen.
Warum tut es das Programm nicht?