PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QSplitter->setSizes() bug?!



dipesh
21-05-2003, 18:29
hi,

so richtig logisch scheint es mir nicht. Gegeben ist ein Splitter welcher 2 QListView's trennt.
Beim beenden wird mittels
conf->writeEntry("mySplitter", mySplitter->sizes());
die Position des QSplitter's gespeichert und beim starten sorgt ein
mySplitter->setSizes(conf->readIntListEntry("mySplitter"));
für das Wiederherstellen der Groesse.

So weit so gut. Das ganze funktioniert erwartungsgemaess einwandfrei. Nun ist es aber moeglich den Splitter "snappen" zu lassen. Bedeutet; man ziehe den Splitter bis zum Fensterrand woraufhin die zuvor dort sichtbare QListView gleichsam versteckt wird und der Splitter selbst am aessersten Rand klebt. Ansich eine nuetzliche Sache.
Wie aber genau kann ich diesen Zustand per Code erreichen? setSize() scheint da herzlich wenig zu helfen. Da die ListView auf ein isVisible() stets mit TRUE antwortet scheidet der Weg wohl auch aus. SetMinimumSize() und das durchprobieren der diversen ResizeMode's brachten ebenso wie google.de keinen Erfolg.

Jemand eine Idee dazu? oder hab ich da etwas übersehen?

anda_skoa
21-05-2003, 18:41
Hmm, keine Ahnung, mit Splittern hab ich noch nicht gearbeitet.

Was ist, wenn du den entsprechende Eintrag in der Size Liste auf 0 setzt?

Oder das Widget mit hide() versteckst?

Ciao,
_

dipesh
21-05-2003, 21:14
Genau das ist es ja. Gespeichert wird Erwartungsgemeass (416,0) - es handelt sich hierbei um prozentuale Angaben! versucht man jedoch diesen Effekt durch ein setSize(416,0) herbeizufuehren, so wird die eigentlich auszublendende ListView auf deren MinSize gesetzt - also bleibt sichtbar. Ein setzen auf setMinSize & Co. auf 0 brachte da auch nicht viel.
Der QSplitter selbst erreicht den Effekt das sicht die Listview ausblendet jedoch ohne das Listview selbst auf hide() zu setzen. Mich würde interessieren wie genau sich dieser Effekt Codeseitig wiederholen lässt. Oder muss man hier von QSplitter ableiten, Methoden überschreiben und dann ggf. setVisible() nutzen? Kann ich mir irgendwie nicht vorstellen...

dipesh
21-05-2003, 21:17
Das ganze hat übrigens den Hintergrund, dass sämtliche KDE/QT-Anwendungen die QSplitter in der Form nutzen sich beim beenden/wiederherstellen der Ansicht / Splitterpositionierung ähnlich verhalten. Ein "gesnappter" Splitter wird _NICHT_ gespannt wiederhergestellt. Ein genereller Bug? Leider brachten google.de, etc. nicht viel Resultate zutage. Mir fallen da spontan Krusader und KMLDonkey an, die diesem Phänomen erliegen.

anda_skoa
21-05-2003, 22:43
Ist das immer ein Vertipper, wenn du setSize schreibst, oder machst du wirklich setSize statt setSizes?

Ciao,
_

dipesh
22-05-2003, 14:24
Ein vertipper... habe nicht die ganze trolltech-Documentation im Kopf und so kann es den schonmal vorkommen, dass man bei dem Versuch aus dem Gehirn zu zitieren die ein oder anderer Schreibweise durcheinander wirft - zugegebenermassen sehr hinderlich, wenn man beim entwickeln immer wieder nachgucken muss. Allerdings ist es noch viel unangenehmer ständig zwischen den verschiedenen Programmiersprachen pendeln zu müssen und sich dann immer wieder dabei zu ertappen, wie man beispielsweise Pascal-Code in ein QT-Prog gehackt hat :-)
Wird wohl Zeit, dass es endlich möglich wird Festplatten an sein Gehirn anzuschliessen und Daten auf diesem Wege auszulagern und bei Bedarf wieder zurückzuspielen. Weh dann es gibt einen Head-crash *g*