QStackedWidget ein Widget übergreifend darstellen

Alles rund um die Programmierung mit Qt
Antworten
prinzenrolle
Beiträge: 25
Registriert: 4. August 2010 18:38

QStackedWidget ein Widget übergreifend darstellen

Beitrag von prinzenrolle »

Hallo,

ich benutze QStackedWidget um verschiedene "Seiten" darzustellen
und erzeuge und lösche Widget ("Seiten") dynamisch.
Nun habe ich in der abgeleiteten Klasse von QStackedwidget also
dort wo die Seiten gelöscht und erstellt werden ein Widget das ich gerne auf jeder Seite darstellen möchte.
In der QStackedWidget Klasse wird das Widget selbst verändert,
deswegene reicht eine Kopie des Widgets nicht.

Ich habe das versucht nun wie folgt zu lösen:

Code: Alles auswählen

Stack::Stack(QWidget *parent)
    : QStackedWidget(parent), S_ErrorTimeOut(0)
{
...
    S_ErrorWidget = new ErrorWidget(this);
    S_Main = new MainScreen(S_ErrorWidget,0);
...
}

Code: Alles auswählen

class Stack : public QStackedWidget
{
    Q_OBJECT
public:
    Stack(QWidget *parent=0);
    ~Stack();
protected:
    void mousePressEvent(QMouseEvent* event);
private slots:
...
private:
    void RemoveWidgets(void);
    MainScreen *S_Main;
    ErrorWidget *S_ErrorWidget;
...
signals:

private slots:
...
};

Code: Alles auswählen

void Stack::ShowConfig(void)
{
...
    RemoveWidgets();
    S_Config = new Config(S_ErrorWidget, this);
    addWidget(S_Config);
    this->setCurrentWidget(S_Config);
...
}

Code: Alles auswählen

class Config : public QWidget, private Ui::Config
{
    Q_OBJECT
public:
    Config(ErrorWidget *PTR_ErrorWidget, QWidget *parent = 0);
...
private:
    ErrorWidget *S_ErrorWidget;
};
Wird aber nun das Widget S_Config gelöscht wird auch das Widget S_ErrorWidget mitgelöscht.
Wie kann ich das vermeide oder anders lösen?
Mein erster Ansatz wäre nun den Destrüktor von Config selbst schreiben.

Aber gibt es eine andere bessere Lösung?

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

Re: QStackedWidget ein Widget übergreifend darstellen

Beitrag von franzf »

1) Warum denn von QStackedWidget ableiten? Was machst du so wichtiges im mousePressEvent? (Ableiten ist eine sehr starke Bindung, wenn man es vermeiden kann, sollte man es lassen).

2) Wenn das Widget immer angezeigt werden soll, dann pack es doch zusammen mit dem StackedWidget in ein Layout...

3) Das Problem liegt in der automatischen Zerstörung von childs eines QObject (Widgets, die irgendwie child eines anderen Widgets sind, gehören dazu). Wird aber durch 2) gelöst.
Antworten