[gelöst]QTableWidget gibt QTableWidget nicht frei
Verfasst: 24. Oktober 2008 14:07
Hallo zusammen,
ein neuer Tag bringt ein neues Problem
Ich arbeite gerade mit dem QTableWidet.
Ich lege bei der Initialisierung meiner Widgetklasse ein neues QTableWidget an, und generiere zu Testzwecken in ein QVector<QTableWidgetItem*> eine Menge an Items.
Wenn ich nun aufgrund von Größenveränderungen des Widgets die Positionen der Items neu berechne und neu einfügen will bekomme ich folgende Fehlermeldung:
"QTableWidget: cannot insert an item that is already owned by another QTableWidget"
Ich gehe folgendermaßen vor:
Im Konstruktor meines Widgets lege ich den Datenvector an und initialisiere das QTableWIdget, und rufe dann die Methode auf die das ganze Befüllen soll. Die Parameter dienen nur der Berechnung der notwendigen Anzahl an Spalten und Zeilen:
In der recalculateAndRearrangeTable()-Methode versuche ich zunächst alle Items herauszulöschen. Danach berechne ich die notwendige Anzahl an Spalten und Reihen neu und versuche die selben Items aus dem QVector wieder einzufügen.
Beim ersten Durchlauf funktioniert das Ganze problemlos, sobald ich aber zum zweiten Mal sortieren will bekomme ich obige Fehlermeldung.
Setze ich bei jedem Neuberechnen mit new neu erzeugte Items hinein klappt es. Aber das ist natürlich nicht der Sinn.
Ich weiß nicht wie ich die Items "frei" bekomme.
Ob ich übrigens in der recalculateAndRearrangeTable-Methode ein neues QTableWidget erzeuge mit new, ändert an der Fehlermeldung leider gar nichts. Irgendwie/wo bleibt die Verbindung zum alten Widget bestehen.
Auch wenn ich
aufrufe, ändert dies nichts.
Ich hoffe, mir kann jemand helfen.
Vielen Dank.
Viele Grüße
jerry42
ein neuer Tag bringt ein neues Problem
Ich arbeite gerade mit dem QTableWidet.
Ich lege bei der Initialisierung meiner Widgetklasse ein neues QTableWidget an, und generiere zu Testzwecken in ein QVector<QTableWidgetItem*> eine Menge an Items.
Wenn ich nun aufgrund von Größenveränderungen des Widgets die Positionen der Items neu berechne und neu einfügen will bekomme ich folgende Fehlermeldung:
"QTableWidget: cannot insert an item that is already owned by another QTableWidget"
Ich gehe folgendermaßen vor:
Im Konstruktor meines Widgets lege ich den Datenvector an und initialisiere das QTableWIdget, und rufe dann die Methode auf die das ganze Befüllen soll. Die Parameter dienen nur der Berechnung der notwendigen Anzahl an Spalten und Zeilen:
Code: Alles auswählen
for (int d = 0; d < bilder_insgesamt; d++) {
items.push_back(new QTableWidgetItem(QIcon(QPixmap("test.jpg")), ""));
items[0]->setToolTip("Name der Datei");
}
qtw = new QTableWidget(this);
recalculateAndRearrangeTable(view, QSize(100, 100));
Code: Alles auswählen
int rows = qtw->rowCount();
int columns = qtw->columnCount();
for(int reihe = 0; reihe < rows; reihe++) {
for (int spalte = 0; spalte < columns; spalte++) {
delete qtw->itemAt(spalte, reihe);
}
}
...
qtw->setColumnCount(anzahlMoeglicherBilderProZeile);
qtw->setRowCount(reihen);
...
qtw->setItem(j, k, items[bilderEingefuegt]);
Setze ich bei jedem Neuberechnen mit new neu erzeugte Items hinein klappt es. Aber das ist natürlich nicht der Sinn.
Ich weiß nicht wie ich die Items "frei" bekomme.
Ob ich übrigens in der recalculateAndRearrangeTable-Methode ein neues QTableWidget erzeuge mit new, ändert an der Fehlermeldung leider gar nichts. Irgendwie/wo bleibt die Verbindung zum alten Widget bestehen.
Auch wenn ich
Code: Alles auswählen
delete qtw;
qtw = new QTableWidget(this),Ich hoffe, mir kann jemand helfen.
Vielen Dank.
Viele Grüße
jerry42