QSplitter sauber in QSettings speichern
-
Hallo,
ich versuche die Größen eines QSplitter Objekts mit QSettings zu speichern.
Nun sind diese Größen in einer QList<int>.
Wie speichere ich diese am Besten in den QSettings .. "beginWriteArray" und dann die Werte schreiben erzeugt eine seltsame Struktur. Oder gehts nicht anders ?
Und wenn ich schon dabei bin .. kann man einem QSplitter auch initial sizes mitgeben ? Also 1. Widget bekommt 200px und keinen Strechfaktor und 2. Widget geb ich nur nen Strechfaktor mit. Widget 1 soll jedoch noch per Handle verstellt werden können (ansonsten ginge es wohl mit der minimalSize).
Hoffe es ist einigermaßen verständlich.. danke
-
Nahe liegt doch, einfach die saveGeometry()- und saveState()-Funktionen des QSplitters zu verwenden - oder spricht etwas dagegen?
-
Super, danke!
saveStates() war genau das, was ich gesucht habe.
Das stand bei QSettings ...
See Window Geometry for a discussion on why it is better to call QWidget::resize() and QWidget::move() rather than QWidget::setGeometry() to restore a window's geometry.
... aber das gilt ja nur für Frames. Bin fälschlicherweise davon ausgegangen, dass es immer besser ist direkt sizes zu nehmen.
Zu der 2. Frage, ich weiss nicht obs verständlich war. Ich will soetwas wie z.B. beim qtcreator.
Da ist ja links das Projekt mit den ganzen Files und daneben der Editor.
Wenn ich jetzt die Fenstergröße ändere, behält die projektübersicht die Breite und nur der Editor wird kleiner.Geht das mit dem QSplitter oder muss ich mir da was bauen ?
-
Du wirst das Fenster dazu ja in Widgets einteilen müssen - versuch doch mal, dem linken Widget mit setFixedSize() bzw. setFixedWidth() eine feste Breite zu verpassen, vielleicht hilft das deinem Problem schon. Die Größe könntest du dann vom User über den Splitter festlegen lassen (also Splitter-Event abfangen und neue Größe mit setFixedWidth() setzen).
Falls das nicht geht, könntest du das resizeEvent() deines Fensters abfangen und da irgendwas einbauen. Dürfte auch nicht schwer sein, aber die erste Lösung ist sicher eleganter.