Clearing von Layouts in Qt

Bin ich erstellen, eine Anwendung in Qt, die es Benutzern ermöglicht zu schleppen, um verschiedene "Module" in ein QGraphicsView. Wenn eines dieser Module ausgewählt ist, sendet er ein signal um, welches dann abgeholt von einem "ConfigurationWidget", die eine Seite-panel, welches anzeigen soll, können alle relevanten Parameter des ausgewählten Moduls:

class ConfigurationWidget : public QWidget
{
  Q_OBJECT

  public:
    ConfigurationWidget(QWidget *parent) : QWidget(parent) {}  

  public slots:
    void moduleSelected(Module* m)
    {
      if(layout())
      { 
        while (itsLayout->count()>0) 
        { 
          delete itsLayout->takeAt(0); 
        }
      }
      delete layout();

      itsLayout = new QFormLayout(this);
      itsLayout->addRow(QString(tr("Type:")),     new QLabel(m->name()));
      itsLayout->addRow(QString(tr("Instance:")), new QLabel(m->instanceID()));
      //... Display a whole bunch of other fields that depends on the module
    }
};

Das problem ist, dass die ConfigurationWidget nie wird tatsächlich gelöscht, wenn ein Modul ausgewählt ist. Die neuen Felder sind nur gezeichnet, über die alten. Ich habe versucht, verschiedene Kombinationen von hide() und show(), invalidate(), update(), etc. ohne Erfolg.

Was ist der richtige Weg, um ein widget, das können Sie ändern Sie die Felder wie dieses on-the-fly?

Sie sollten eine QStackedWidget

InformationsquelleAutor rcv | 2011-01-31

Schreibe einen Kommentar