ich bin Qt-Anfänger und habe ein Problem, das ich auf folgende Applikation reduziert habe:
Main-Datei:
Code: Alles auswählen
// Main
#include <QtGui>
#include "worker.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget w;
CWorker worker(&w);
w.show();
return app.exec();
}
Code: Alles auswählen
#include <QtGui>
class CWorker : public QObject
{
Q_OBJECT
public:
CWorker(QWidget* w) : widget(w) { f1(); }
void f1(void);
void f2(void);
public slots:
void slot1(void) { f1(); }
void slot2(void) { f2(); }
private:
void empty(void);
QWidget* widget;
};
inline void CWorker::f1(void)
{
empty();
// Das widget mit neuem Inhalt füllen.
QVBoxLayout* layout = new QVBoxLayout(widget);
layout->addWidget(new QPushButton("f1-Dummy"));
QPushButton* button = new QPushButton("f1-Button1");
QObject::connect(button, SIGNAL(clicked(bool)), this, SLOT(slot2()));
layout->addWidget(button);
}
inline void CWorker::f2(void)
{
empty();
// Das widget mit neuem Inhalt füllen.
QHBoxLayout* layout = new QHBoxLayout(widget);
QPushButton* button = new QPushButton("f2-Button1");
QObject::connect(button, SIGNAL(clicked(bool)), this, SLOT(slot1()));
layout->addWidget(button);
}
inline void CWorker::empty(void)
{
// Versuch, das widget zu leeren.
QLayout* layout = widget->layout();
if (layout == NULL) { return; }
while (layout->count() > 0)
{
QLayoutItem* item = layout->itemAt(0);
layout->removeItem(item);
delete item;
}
delete layout;
}
Eigentlich hätte ich gedacht, daß durch die Funktion empty() das widget geleert wird und dann mit neuem Layout und neuen Widgets gefüllt werden kann. Beim Benutzen der Buttons während des Programmlaufs werden diese aber nicht gelöscht. Sie sind nach wie vor im Widget enthalten.
Mein Problem ist jetzt: Wie kann eine Funktion, bevor sie eigene Widgets einbaut, das Widget richtig leeren, wenn sie dessen Kinder nicht kennt?