Seite 1 von 1

Für Hauptfenster, kann nur einmal setCentralWidget benutzen?

Verfasst: 1. September 2008 18:08
von blm
im Konstruktor habe ich setCentralWidget eingesetzt,
MainWin::MainWin()
{
plotter = new Plotter; //Plotter ist ein Widget
textEdit = new QTextEdit;
setCentralWidget(plotter);
}
in Funktion changeToText(), und changeToPlotter(), ich möchte die zentral Widget ändern,
so schreibe ich:
MainWin::changeTotext()
{
setCentralWidget(textEdit);
}

MainWin::changeToPlotter()
{
setCentralWidget(plotter);
}

aber wenn ich die change Funktionen anrufen, :( es geht nicht..
das Hauptfenst scheint immer das Plotter Widger.

Warum? Ich brauche eure Hilfe, danke Sehr!

Verfasst: 1. September 2008 21:21
von CaptnChaos
machs doch anders.
setze als parent für dein plotter und textedit centralWidget() und bei change ruf show bzw hide beim change event

Verfasst: 2. September 2008 11:34
von blm
KernelPanic hat geschrieben: setze als parent für dein plotter und textedit centralWidget()
danke, aber wie?

MainWin::MainWin()
{
..
setCentralWidget(textEdit);
setCentralWidget(plotter);
...
}

MainWin::changeTotext()
{
textEdit->show();
plotter->hide()
}

MainWin::changeToPlotter()
{
plotter->show();
textEdit->hide()
}

so?? aber gibt`s noch Problem.. :( ich ruf changeTotext() an, gibt`s Fehlermeldung , und Fehler bei Anruf von changeToPlotter() wieder!

Interessant wäre, falls ich in Konstruktor setCentralWidget(textEdit) and setCentralWidget(plotter) umtausche,

wie

MainWin::MainWin()
{
...
setCentralWidget(plotter);
setCentralWidget(textEdit);
...
}

dann wenn ich changeToPlotter anrufe, die Hauptfenst ist leer, kein Widget is dagestellt, und ruf ich anschließend changeToText, kann zurücksezten, aber potter lässt sich immer nicht sehen.
Jetzt verstehe ich nicht..:?


---ich habe eine andre Idee, wie folgend, aber geht auch nicht, wieso!?

MainWin::MainWin()
{
stackedwidget = new QStackedWidget;

stackedwidget->addWidget(plotter);
stackedwidget->addWidget(textEditor);

setCentralWidget(stackedwidget);
}

MainWin::changeTotext()
{
stackedwidget->setCurrentWidget(textEditor);
}

:?

Verfasst: 2. September 2008 12:17
von upsala
Einrückung und Code-Formatierungstags wären angebracht...

QMainWindow takes ownership of the central-Widget oder so ähnlich steht in der Doku, d.h. nach dem ersten Wechsel werden deine Widgets gelöscht.

Und wenn es schon eine Fehlermeldung gibt, dann laß uns die nicht erraten wobei die anscheinend auf obiges hinweist...

Verfasst: 2. September 2008 12:57
von blm
upsala hat geschrieben:Einrückung und Code-Formatierungstags wären angebracht...

QMainWindow takes ownership of the central-Widget oder so ähnlich steht in der Doku, d.h. nach dem ersten Wechsel werden deine Widgets gelöscht.

Und wenn es schon eine Fehlermeldung gibt, dann laß uns die nicht erraten wobei die anscheinend auf obiges hinweist...
danke, d.h wenn ich Hauptfenster wechseln mölchte, so benutz setCentralWidget nie?

so welche Funktion könnte ich benutzen?

stackedWidget? aber das kann nicht ein "voll screen" realisieren,oder?

Verfasst: 2. September 2008 13:07
von macman
Nimm doch das StackedWidget als CentralWidget.

Verfasst: 2. September 2008 13:28
von blm
macman hat geschrieben:Nimm doch das StackedWidget als CentralWidget.
hallo, StackedWidgetv kann nur auf ein "QDialog" aber nicht auf "QMainWindow",oder?

Ich habe schon so probiert,
MainWin::MainWin()
{
stackedwidget = new QStackedWidget;

stackedwidget->addWidget(plotter);
stackedwidget->addWidget(textEditor);

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedwidget);
setLayout(layout);
}

MainWin::changeTotext()
{
stackedwidget->setCurrentWidget(textEditor);
}

kein Widget ist in mein MainWindow dargestelle.
:o

Verfasst: 2. September 2008 19:48
von upsala
Warum sollte QStackedWidget nur bei einem QDialog funktionieren?

Was willst du auf einmal mit deinem Layout?

Warum sagst du deinem QMainWindow nicht, daß es das QStackedWidget darstellen soll?