Qt: delete und QListWidget
-
Um ein Item aus einem
QListWidgetzu löschen kann man ja mitcurrentItemoderitem(int row)einen Pointer auf einQListWidgetItembekommen und dieses mitdeleteaus demQListWidgetlöschen.Woher weiss nun
QListWidget, dass das Item gelöscht wurde? Klar, der Speicher wird freigegeben, aberQListWidgetkann das doch nicht wissen!? Weiss jemand wie das intern implementiert sein könnte? Ich stehe da echt gerade auf dem Schlauch...
-
Indem du remove an dem list widget aufrufst??
http://qt-project.org/doc/qt-4.8/qlistwidget.html#removeItemWidget
-
Ja,
removegeht, aber das meinte ich nicht.Es geht um Seite 65 im Foundations of Qt Development Buch (man findet das pdf davon mit Google). Da steht
The opposite of adding a new item is shown in Listing 2-5. Deleting a list widget item is just a matter of calling delete on it. The currently selected item is returned from thecurrentItem method, so just delete whatever that method returns. If no item is selected, the return value is 0 (zero, a null pointer), but that is not a problem when used in a call to delete—it is simply ignored
und dazu Listing 2-5.
void ListDialog::deleteItem() { delete ui.list->currentItem(); // list ist ein QListWidgetItem, ui eine Desinger Form }Woher weiss nun
QListWidget, dass das aktuelle Element tatsächlich gelöscht wurde? Ich habs mal getestet und es hat funktioniert. Aber wie das intern abläuft ist mir schleierhaft.
-
Weil jedes QObject im Destruktor ein destroyed Signal auslöst. Es gibt sogar einen QPointer, der darauf horcht und ungültig wird, wenn das Objekt gelöscht wird. Die ListView wirds an der Stelle wahrscheinlich nicht verwenden, sondern sich direkt mit dem Signal verbinden (bzw., das Model), ist aber nützlich QPointer zu kennen.
-
Vielen Dank für die Erklärung. Ich werde mir den
QPointermal genauer anschauen.