[gelöst] FlowLayout: Inhalte überlagern sich

Alles rund um die Programmierung mit Qt
Antworten
Scary Hallo

[gelöst] FlowLayout: Inhalte überlagern sich

Beitrag von Scary Hallo »

Ich habe gerade ein QFormLayout eingebaut, indem ich verschiedene Texte einer Liste eintrage. Nun kommt es vor, dass sich diese Liste ändert. Dann lösche ich die alten Elemente aus dem QFormLayout und füge die neuen ein. Also so:

Code: Alles auswählen

void MainWidget::showInfos()
{
    infoList.clear();
    infoList = image.getDeviceInfos();   // Eine QMap

    // clear layout
    while(ui->formLayoutInfo->count() > 0)
    {
        ui->formLayoutInfo->removeItem(ui->formLayoutInfo->takeAt(0));
        //delete ui->formLayoutInfo->takeAt(0);
    }

    ui->formLayoutInfo->update();  // <- Nur so ein Veruch

    // add new row to layout
    foreach(QString key, infoList.keys() )
    {
        QString value = infoList[key];
        QLabel *label = new QLabel(value);
        key.append(":");
        ui->formLayoutInfo->addRow( key, label);
    }

    ui->formLayoutInfo->invalidate(); // <- Nur so ein Veruch
}
Nun werden die neuen Inhalte einfach überschrieben, ohne das alte zu löschen. Also so:
Bild
Hat jemand 'ne Idee?
Zuletzt geändert von Scary Hallo am 14. Juni 2012 15:09, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: FlowLayout: Inhalte überlagern sich

Beitrag von franzf »

Die Items im Layout wurden nicht gelöscht und liegen noch an der Stelle. Siehe auch Doku zu QLayout::removeItem().
Scary Hallo

Re: FlowLayout: Inhalte überlagern sich

Beitrag von Scary Hallo »

Ich habe das Löschen jetzt folgendermaßen umgebaut:

Code: Alles auswählen

    // clear layout
    while(ui->formLayoutInfo->count() > 0)
    {
        QLayoutItem *item = ui->formLayoutInfo->takeAt(0);
        ui->formLayoutInfo->removeItem(item);
        delete item;
    }
Das bringt aber auch nichts. Gleicher Effekt.
Scary Hallo

Re: FlowLayout: Inhalte überlagern sich

Beitrag von Scary Hallo »

Hat keiner eine Idee, oder kann mir sagen, was ich falsch mache? Wie kann ein gelöschtes Objekt beim Neuzeichnen noch angezeigt werden?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: FlowLayout: Inhalte überlagern sich

Beitrag von franzf »

Das layout->itemAt(index) wird wohl wieder ein layout() haben, in dem andere QLayoutItems horizontal angeordnet sind. Du musst dich also durch diese Hierarchie hangeln, bis du ein widget() bekommst, dieses löschen, und alles bis nach unten ebenfalls. (QLayoutItem-Destruktor ist leer, und die Items im FormLayout sind nicht von QLayoutItem abgeleiet).
Schau dir aber auch dringend den Sourcecode an, wie die Items im FormLayout zusammen kommen.
Scary Hallo

Re: FlowLayout: Inhalte überlagern sich

Beitrag von Scary Hallo »

Puh! Der Sourcecode is mir noch ein bissl zu Komplex. Evtl. in einem halben Jahr oder so. Trotzdem hast Du mir weiter geholfen. Man muss auch das dazugehörige Widget löschen. Ich hab's jetzt so gemacht:

Code: Alles auswählen

    // clear layout
    while(ui->formLayoutInfo->count() > 0)
    {
        QLayoutItem *item = ui->formLayoutInfo->takeAt(0);
        ui->formLayoutInfo->removeItem(item);
        delete item->widget();
        delete item;
    }
Spricht da etwas dagegen?
Danke schön. :)
Antworten