QSettings, restoreGeometry maximiert nicht korrekt

Alles rund um die Programmierung mit Qt
Antworten
gentlesea
Beiträge: 27
Registriert: 27. März 2008 10:30

QSettings, restoreGeometry maximiert nicht korrekt

Beitrag von gentlesea »

Hallo,

im Konstruktor meiner Klasse, die von QMainWindow erbt, habe ich folgendes zur Wiederherstellung der Fenstergrößen eingebaut:

Code: Alles auswählen

QSettings settings("meineFirma", "meineApplikation");
restoreGeometry(settings.value("geometry").toByteArray());
Gespeichert wird das Ganze beim Schließen der Anwendung. Hierzu habe ich die closeEvent-Methode überschrieben:

Code: Alles auswählen

void meineKlasse::closeEvent(QCloseEvent *event)
{
	QSettings settings("meineFirma", "meineApplikation");
	settings.setValue("geometry", saveGeometry());
}
Das funktioniert unter Windows auch recht gut, leider nur dann nicht, wenn die Anwendung maximiert ist. Muss ich das noch manuell selber dazu speichern?


Viele Grüße
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ja klar, ist auch besser so. Wenn Qt die Geometry sichern würde, dann hättest Du beim Restore kein maximiertes Fenster, sondern ein Fenster auf Desktopgröße aufgezogen. Wenn Du das Maximized-Flag separat sicherst und beim Restore entsprechend reagierst, dann kann der Anwender wenigstens wieder zur Ursprungsgröße zurück.
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.
gentlesea
Beiträge: 27
Registriert: 27. März 2008 10:30

Nicht zufriedenstellend

Beitrag von gentlesea »

Danke für Deine schnelle Antwort. Leider gibt mir showMaximized(); genau dasselbe, wie wenn ich das Fenster maximiere und dann den maximierten Zustand abspeichere. Es bleibt mir lediglich die Möglichkeit, das Fenster jedes Mal von Hand zu maximieren. Was Qt da als "maximieren" versteht, ist für mich kein richtiges "Maximieren". Leider.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Also bei mir funktioniert es zumindest mit einem getesteten Programm, weiß aber nicht mit welcher Qt-Version das jetzt compiliert wurde. saveState und restoreState werden immer ausgeführt, zusätzlich in meinen Sourcen steht nur:

Code: Alles auswählen

writeSettings{
.
.
	settings.setValue("maximized", isMaximized());
	settings.setValue("state", saveState());
.
.
}

readSettings{
.
.
	if (settings.value("maximized", false).toBool())
		showMaximized();
	restoreState(settings.value("state").toByteArray());
.
.
}
Und damit bekomme ich das erwartete Verhalten.
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.
gentlesea
Beiträge: 27
Registriert: 27. März 2008 10:30

Beitrag von gentlesea »

Vielen Dank für Deine Mühe. Ich bekomme das Fenster auch "maximiert" dargestellt (sprich, der Button in der Mitte lautet nun "Verkleinern", wenn ich die Maus über ihn halte), nur irgendwas scheint dabei nicht zu funktionieren.
Könnte an meinem Grafiktreiber liegen, könnte an Windows Vista SP1 liegen, könnte auch an Qt 4.4 liegen. Werde das mal auf einem Windows XP System testen.
Markus
Beiträge: 105
Registriert: 31. Januar 2005 16:21

Beitrag von Markus »

gentlesea hat geschrieben: Könnte an meinem Grafiktreiber liegen, könnte an Windows Vista SP1 liegen, könnte auch an Qt 4.4 liegen. Werde das mal auf einem Windows XP System testen.
Bei mir funktioniert das Speichern und Wiederherstellen der Fensterdarstellung auch wenn das Fenster maximiert wurde. Mein Hauptfenster ist ein QMainWindow, wobei ich im Konstruktor nach dem restoreGeometry() die show()-Methode aufrufe. Ich verwende Qt 4.4.0, VS2005 SP1 und WinXP SP2.

Code: Alles auswählen

void MainWindow::restoreWindowGeometry( void )
{
	QSettings settings( FILE_INI, QSettings::IniFormat );

	settings.beginGroup("Geometry");
	this->restoreGeometry( settings.value("MainWindowGeometry").toByteArray() );
	settings.endGroup();
}


void MainWindow::saveWindowGeometry( void )
{
	QSettings settings( FILE_INI, QSettings::IniFormat); 

	settings.beginGroup( "Geometry" );
	settings.setValue("MainWindowGeometry", this->saveGeometry() );
	settings.endGroup();
}

Antworten