Größe Dialog automatisch an Inhalt anpassen

Verschiedenes zu Qt
Antworten
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Größe Dialog automatisch an Inhalt anpassen

Beitrag 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
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Beitrag 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?!?
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Beitrag 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?
C167
Beiträge: 105
Registriert: 9. Februar 2008 20:30

Beitrag 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
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Beitrag 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?
Antworten