Frage zum Löschen QTreeWidgetItems

Alles rund um die Programmierung mit Qt
Antworten
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Frage zum Löschen QTreeWidgetItems

Beitrag 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());
        }

    }

}
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Frage zum Löschen QTreeWidgetItems

Beitrag 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;".
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Frage zum Löschen QTreeWidgetItems

Beitrag 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
Antworten