Für Hauptfenster, kann nur einmal setCentralWidget benutzen?

Alles rund um die Programmierung mit Qt
Antworten
blm
Beiträge: 23
Registriert: 1. September 2008 17:06

Für Hauptfenster, kann nur einmal setCentralWidget benutzen?

Beitrag 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!
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag 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
blm
Beiträge: 23
Registriert: 1. September 2008 17:06

Beitrag 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);
}

:?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...
blm
Beiträge: 23
Registriert: 1. September 2008 17:06

Beitrag 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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Nimm doch das StackedWidget als CentralWidget.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
blm
Beiträge: 23
Registriert: 1. September 2008 17:06

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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?
Antworten