Seite 1 von 1

Frage zum Löschen QTreeWidgetItems

Verfasst: 25. Mai 2012 22:55
von Marcus Breuer
Hallo Forum,

ich habe eine kurze Frage. Und zwar bastele ich mir ein QTreeWidget zusammen. Es funktioniert auch wunderbar. Allerdings erzeuge ich in einer Schleife, wie gleich im Quellcode zu sehen, immer ein new QTreeWidget. In meinem Buch zu Qt und auf den Internetseiten, die ich gefunden habe, wir es genauso gemacht.
Aber wo lösche ich diese Items dann wieder? Entstehen da nicht bei großen Datenmengen riesige Löscher im Speicher?

Ich habe schon ein paar Umwege versucht, mir bool'schen Variablen im Destruktor eine Funktion aufzurufen, die dann wie bei mir "TopLevel und SubLevel" löschen soll. Aber dabei schmiert mein Programm ab.

Ich möchte eigentlich nur gerne wissen, ob so, wie in meinem Code Speicherlecks auftreten oder ob ich mich einfach nur vertue oder etwas übersehen habe.

Vielen Dank für jede Antwort.

Beste Grüße,
Marcus

Code: Alles auswählen

void MainWindow::CreateTreeWidgetItems()
{

//Times ist ein QVector<Qtime>

    int Hour, LastHour=0;
    QString HourToAppend;

    QTreeWidgetItem *TopLevel;
    QTreeWidgetItem *SubLevel;


    for(int i=0; i<Times.size(); i++)
    {
        Hour = Times[i].hour();

        if(Hour>LastHour)
        {
            TopLevel = new QTreeWidgetItem(ui->treeWidget);
            HourToAppend = QString::number(Hour);

            switch( HourToAppend.length() )
            {
                case 1: HourToAppend.prepend("0");
                        HourToAppend.append(":00 Uhr");
                        break;
                case 2: HourToAppend.append(":00 Uhr");
                        break;
            }

            TopLevel->setText(0, HourToAppend);

            SubLevel = new QTreeWidgetItem(TopLevel);
            SubLevel->setText(0, Times[i].toString());

            LastHour=Hour;
        }

        else
        {
            SubLevel = new QTreeWidgetItem(TopLevel);
            SubLevel->setText(0, Times[i].toString());
        }

    }

}

Re: Frage zum Löschen QTreeWidgetItems

Verfasst: 26. Mai 2012 07:21
von franzf
Ein paar Zitate aus der Doku:

QTreeWidget::~QTreeWidget ()
Destroys the tree widget and all its items.

QTreeWidgetItem::~QTreeWidgetItem () [virtual]
Destroys this tree widget item.
The item will be removed from QTreeWidgets to which it has been added. This makes it safe to delete an item at any time.

Also:
Einem QTreeWidget gehören seine Items, er kümmert sich spätestens bei seiner Zerstörung um die Freigabe (delete) seiner items. Willst du vorher Items für immer loswerden, einfach "delete item;".

Re: Frage zum Löschen QTreeWidgetItems

Verfasst: 26. Mai 2012 11:10
von Marcus Breuer
hallo franzf,

danke sehr. ich hatte mich nur auf den destruktor der items konzentriert. jetzt bin ich wieder etwas schlauer.

beste grüße,
marcus