Höhe von angedocktem DockWidget speichern

Alles rund um die Programmierung mit Qt
Antworten
matthiasw
Beiträge: 20
Registriert: 24. April 2014 13:50

Höhe von angedocktem DockWidget speichern

Beitrag von matthiasw »

Hallo,

ich verwende in meiner Anwendung neben einem QMainWindow mehrere QDockWidgets, die allesamt an bestimmten Stellen im QMainWindow andockbar sind. Das funktioniert soweit. Ich möchte nun die Höhe eines angedockten QDockWidget speichern, um es bei erneutem Öffnen wieder in alter Größe vorzufinden. Bisher verwende ich folgenden Code, der die Fensterzustände über ein QSettings-Objekt in einer .ini-Datei ablegt und bei erneutem Starten einliest. Dies funktioniert auch soweit:

[closeEvent von MainWindow]

Code: Alles auswählen

settings->setValue(Const::MainGeometry_Key, saveGeometry());            // Einstellungen zu Hauptfenster und Dockwidgets speichern
settings->setValue(Const::MainStates_Key, saveState())
[Konstruktor von MainWindow]

Code: Alles auswählen

restoreGeometry(settings->value(Const::MainGeometry_Key).toByteArray());    // Einstellungen zu Hauptfenster und Dockwidgets restaurieren
restoreState(settings->value(Const::MainStates_Key).toByteArray());
Mein Problem ist, dass ein Dock-Widget, welches am unteren Rand angedockt wurde und danach in der Höhe verändert wurde, nach dem Starten selten in der vorigen Höhe angezeigt wird. Ich habe es auch damit versucht, die relevanten Koordinaten separat zu speichern und wieder zu restaurieren. Kein Erfolg. Mein Code dazu:

[closeEvent von MainWindow]

Code: Alles auswählen

settings->setValue(Const::DockEventLogY_Key, ui->dockEventLog->y());           // Koordinaten separat speichern
settings->setValue(Const::DockEventLogH_Key, ui->dockEventLog->height());
[Konstruktor von MainWindow]

Code: Alles auswählen

QRect rect = ui->dockEventLog->geometry();
int y = settings->value(Const::DockEventLogY_Key,"0").toInt();
if (y) rect.setY(y);
int height = settings->value(Const::DockEventLogH_Key,"0").toInt();
if (height) rect.setHeight(height);
ui->dockEventLog->setGeometry(rect);
Die Koordinaten sind übrigens vom Dock-Widget selbst. Ich habe es auch mit den Koordinaten vom Haupt-Widget innerhalb des Dock-Widget probiert, geht aber auch nicht. Hat jemand eine Idee, wie man das lösen könnte bzw. wie man einem angedockten QDockWidget eine bestimmte Höhe im Programmcode aufzwingen kann?

Viele Grüße

Matthias
Antworten