Seite 1 von 1
Größe Dialog automatisch an Inhalt anpassen
Verfasst: 12. März 2008 10:32
von otternase
Hallo
ich habe einen Dialog, der zwei Widgets fester Größe enthält und ein Widget per UiLoader zur Laufzeit nachlädt. Die Größe dieses Widgets ist variabel. Ich würde gerne erreichen, dass der Dialog immer nach dem Laden dieses Widgets automatisch in der Größe so verändert wird, dass alle Element sichtbar sind.
Für jeden Tipp dankbar
otternase
Verfasst: 12. März 2008 11:56
von otternase
Aktualisierung des Problems:
ich habe nun folgendes -erfolglos- versucht:
In der SetupUi vom Dialog erfolgt der Aufruf für die Generierung des Widgets "grid", anschliessend versuche ich die Größe dieses Widgets auszulesen und mit resize den Dialog anzupassen.
Code: Alles auswählen
DynWid::DynWid *grid = new DynWid::DynWid(featureAttributes, fields);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(grid);
layout->addWidget(buttonBox);
setLayout(layout);
resize(qMax(grid->size().width(),200), grid->size().height()+100);
qDebug() << grid->size().width() << grid->size().height();
Das Laden des Widgets aus dem ui-File ist straight forward:
Code: Alles auswählen
DynWid::DynWid(QgsAttributeMap *featureAttributes, const QgsFieldMap *fields)
{
QUiLoader loader;
QFile file("Test.ui");
file.open(QFile::ReadOnly);
QWidget *myWidget = loader.load(&file, 0);
file.close();
...}
Im Ui-File (welches zur Laufzeit generiert wird), steht ein geometry Eintrag:
Code: Alles auswählen
<ui version="4.0" >
<class>QWidget</class>
<widget class="QWidget" name="Widget" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>400</height>
</rect>
</property>
...
Seltsamerweise liefert grid->size() jedoch nicht 400*400, sondern 640*480 zurück?!?
Verfasst: 12. März 2008 23:00
von otternase
ist nun gelöst, offensichtlich ist ein QWidget, bevor ihm irgendwelche Größen zugeordnet wurden, 640*480 gross und passt die eigene Größe nicht an die Child Elemente an
ich habe daher einfach die markierte Zeile eingefügt, so klappt es
Code: Alles auswählen
DynWid::DynWid(QgsAttributeMap *featureAttributes, const QgsFieldMap *fields)
{
QUiLoader loader;
QFile file("Test.ui");
file.open(QFile::ReadOnly);
QWidget *myWidget = loader.load(&file, 0);
file.close();
resize(myWidget->size()); // diese Zeile ist der Knackpunkt
...}
Kann mir zufällig jemand sagen, an welcher Stelle der Doku ich hätte suchen müssen, dh. wo ist definiert, welche Default Größe ein QWidget hat?
Verfasst: 12. März 2008 23:39
von C167
evtl. bei QWidget: Size Hints and Size Policies sowie sizeHint(). Mit der Widgetgroesse hat das aber so seine Tuecken wie ich festgestellt hab
Verfasst: 12. März 2008 23:54
von otternase
C167 hat geschrieben:evtl. bei QWidget: Size Hints and Size Policies sowie sizeHint(). Mit der Widgetgroesse hat das aber so seine Tuecken wie ich festgestellt hab
da steht
"By default, composite widgets which do not provide a size hint will be sized according to the space requirements of their child widgets."
So hätte ich mir es ja gewünscht, aber genau das hat bei mir nicht geklappt, warum auch immer?