delete QTableWidgetItem
-
Hallo,
ich habe ein Programm gebaut, in dem ich eine QStringList in einem QTableWidget darstelle.
Meine QStringList ändert sich regelmäßig im Programm. Es kommen nicht nur Zeilen hinzu oder weg, sondern es kann auch mal eine komplett neue Liste sein. Um die Liste darzustellen, rufe ich bei Änderung der Liste folgende Funktion auf:void classX::List_to_widget() { QStringList stringList = objectX->List(); ui->tableWidget->setSortingEnabled(false); int z= ui->tableWidget->rowCount(); for(int a=0; a < z; a++){ ui->tableWidget->removeRow(0); } for(int i = 0; i< stringList.size(); i++){ ui->tableWidget->insertRow(ui->tableWidget->rowCount()); ui->tableWidget->setItem(i,0, new QTableWidgetItem()); ui->tableWidget->setItem(i,1, new QTableWidgetItem()); ui->tableWidget->setItem(i,2, new QTableWidgetItem()); ui->tableWidget->setItem(i,3, new QTableWidgetItem()); ui->tableWidget->setItem(i,4, new QTableWidgetItem()); ui->tableWidget->setItem(i,5, new QTableWidgetItem()); ui->tableWidget->setItem(i,6, new QTableWidgetItem()); ui->tableWidget->setItem(i,7, new QTableWidgetItem()); ui->tableWidget->item(i,0)->setText(stringList[i].section(";",0,0)); ui->tableWidget->item(i,1)->setText(stringList[i].section(";",1,1)); ui->tableWidget->item(i,2)->setText(stringList[i].section(";",2,2)); ui->tableWidget->item(i,3)->setText(stringList[i].section(";",3,3)); ui->tableWidget->item(i,4)->setText(stringList[i].section(";",4,4)); ui->tableWidget->item(i,5)->setText(stringList[i].section(";",5,5)); ui->tableWidget->item(i,6)->setText(stringList[i].section(";",6,6)); } ui->tableWidget->setSortingEnabled(true); ui->tableWidget->sortByColumn(0,Qt::AscendingOrder); }
Da ich die Funktion immer wieder aufrufe, erstelle ich ja auch immer wieder neue "QTableWdigetItems". Da man Objekte, die mit "new" erzeugt wurden, auch wieder löschen sollte, stehe ich nun vor der Frage: wie kann ich das in diesem Fall machen? Oder übernimmt das sogar die Funktion tableWidget->removeRow(0); für mich? Ich finde einfach keinen Weg, auf die items zuzugreifen um diese zu löschen.
Könnt ihr mir einen Tipp geben?Außerdem: Was kann passieren, wenn ich das löschen nicht tue? Das Programm funktioniert ohne Probleme, auch nach 10000 aufrufen der Funktion. (Getestet mit Schleife). Klar, es wir unnötig Speicher belegt, aber kann das auch zu einem Absturz oder ähnlichem führen?
Danke für die Hilfe.
-
Ich wüsste nicht warum Du hier QTableWidgetItems löschen solltest denn die Dokumentation dazu ist eindeutig: 'The table takes ownership of the item.'
-
Danke für eure Antworten. Wenn delete nicht notwendig ist, passt das ja.
Zum Vorschlag "QTableModel": ja, ich schätze du hast Recht. Allerdings müsste ich mich da nochmal einarbeiten, da ich die Klasse nicht kenne. Und mit meiner Funktion habe ich meine Anforderungen eigentlichen erfüllt.... mehr mache ich mit der Tabelle nicht.