Seite 1 von 1

[gelöst] FlowLayout: Inhalte überlagern sich

Verfasst: 12. Juni 2012 10:06
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?

Re: FlowLayout: Inhalte überlagern sich

Verfasst: 12. Juni 2012 10:18
von franzf
Die Items im Layout wurden nicht gelöscht und liegen noch an der Stelle. Siehe auch Doku zu QLayout::removeItem().

Re: FlowLayout: Inhalte überlagern sich

Verfasst: 12. Juni 2012 11:17
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.

Re: FlowLayout: Inhalte überlagern sich

Verfasst: 14. Juni 2012 11:24
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?

Re: FlowLayout: Inhalte überlagern sich

Verfasst: 14. Juni 2012 11:48
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.

Re: FlowLayout: Inhalte überlagern sich

Verfasst: 14. Juni 2012 14:21
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. :)