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
Größe Dialog automatisch an Inhalt anpassen
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.
Das Laden des Widgets aus dem ui-File ist straight forward:
Im Ui-File (welches zur Laufzeit generiert wird), steht ein geometry Eintrag:
Seltsamerweise liefert grid->size() jedoch nicht 400*400, sondern 640*480 zurück?!?
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();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();
...}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>
...
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
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?
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
...}da stehtC167 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
"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?