beim Versuch ein (Dialog-) Widget mit Erweiterung zu resizen, bekomme ich ein seltsames Verhalten. Das Dialogfeld besitzt einen "more"-Button (btn_more) und einen QFrame (frm_extension) mit darin eingebundenen Slidern, Checkboxen und Push-Buttons. Der QFrame ist in der Grundeinstellung nicht sichtbar ( frm_extension.hide() ). Beim togglen des 'btn_more' sendet dieser ein Signal, welches ich mit einer eigenen Funktion abfange, um den QFrame sichtbar zu machen: 'frm_extension.setVisible(true)'. Jetzt darf aber der aufklappende Frame das darüberliegende Layout nicht verändern, also vergrößere ich vorher das main-Widget mittels resize um die Größe (Höhe) des Frame. Das klappt wie gewollt.
Beim umgekehrten Vorgang zeigt sich jetzt ein seltsames Verhalten:
Im Code sind die notwendigen Schritte in umgekehrter Reihenfolge notiert.
Der Frame wird ausgeblendet, das Fenster wird jedoch nicht kleiner als (fixedHeight_Frame + minimumHeight_Rest)
wenn height_Rest kleiner als (fixedHeight_Frame ist.
Das Layout sieht so aus:
Code: Alles auswählen
#====================================[_][X]
| <<<<<<<<<<Anzeigeelement>>>>>>>>>>>>>>>> | <- Normal View
| <<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>>>> |
|_________________________________[ More]__[Quit] |
+-----------------------------------------------------------------------------------------+
| [ ] [X] [_____] [________] xxxxxx =====V======= | (visible)
| [ ] [X] [_____] [________] xxxxxx =====V======= | <- Extension Frame
+-----------------------------------------------------------------------------------------+
Code: Alles auswählen
...
extension = new QFrame(this); // QFrame *extension; im .h file
extension->setMaximumSize (10000,184);
...
mainLayout->addLayout(normalLayout, 0, 0, 1, 2);
mainLayout->addWidget(extension, 1, 0, 1, 2);
setLayout(mainLayout);
extension->hide();
Code: Alles auswählen
void myApp::on_btn_More(bool b)
{
int w, h, s;
s = h = this->height();
w = this->width();
extension->setVisible(b);
if(b){
winPos = pos(); // QPoint winPos; im .h file!
s = h + 184;
resize( w, s);
} else {
extension->hide();
resize( w, (h - 184) );
if(pos() != winPos) move(winPos);
}
}
Oder ist das ein Bug, äh Feature ... ?
Wer das bis hierher gelesen hat, vielen Dank dafür.
In den einschlägigen Foren hab ich das nicht gefunden. Bei Trolltech auch nicht. Und nicht in der Doku. Kann mir jemand mal helfen ?
opensuse 10.1; KDE 3.5.2; Qt 4.1.4; Brain 0.9.5738