Seite 1 von 1

child and parent-widgets

Verfasst: 24. Mai 2013 17:44
von Gora
Hallo,

ich habe eine Frage bezüglich child and parent-widgets.

Ich will ein parent-widget erstellen.
In diesen soll ein child-widget eingefügt werden. Das soweit geschafft.

Das child-widget muss eine vordefinierte Größe haben. Das heißt das parent-widget
soll ein Rahmen sein in dem sich mit einem Abstand von einem Centimeter das child-widget befindet.

Mein Problem nun, wenn ich mir die Geometriedaten über debugger anschaue scheint child-widget
größer zu sein als das parent-widget und die Größe des child-widgets ändert sich nicht automatisch mit
der parent Größe.

Danke schon mal im voraus für die Hilfe.

Re: child and parent-widgets

Verfasst: 27. Mai 2013 10:01
von archer
Hallo,
schau dir mal das Thema Layout an (QLayout, QHBoxLayout...).
In das Parentwidget kommt ein Layout und dann in das Layout das Childwidget.
Dann skaliert es sich auch mit.

Re: child and parent-widgets

Verfasst: 30. Mai 2013 13:00
von Gora
Danke für die Antwort,

das hatte ich schon ausprobiert und es hat auch soweit funktioniert. Das Problem hierbei ist der Rahmen, der muss wie schon gesagt einen festen Abstand haben.
Die Frage ist hier wie kriege ich die richtigen Koordinaten, des Layouts und der Widgets und wie kann ich die Koordinaten des layouts verändern?

Hier nochmal ein Minimal-Beispiel:

Code: Alles auswählen

#include <cmath>
#include <iostream>
#include <QApplication>
#include <QtWidgets/QWidget>
#include <QtGui/QtGui>
#include <QHBoxLayout>
#include <QPushButton>

int main(int argc, char **argv)
{
    QApplication a(argc, argv);
    QWidget * widget_parent=new QWidget;
    widget_parent->setGeometry(100,100,640,480);
    QWidget *  widgetChild=new QWidget;
    QHBoxLayout * myLayout=new QHBoxLayout;
    myLayout->addWidget(widgetChild);
    widget_parent->setPalette( QPalette( Qt::blue ) );
    widgetChild->setPalette( QPalette( Qt::red ) );
    widgetChild->setAutoFillBackground(true);
    //widgetChild->setParent(widget_parent);

    widgetChild->setGeometry(widget_parent->geometry().x()+30,
                             widget_parent->geometry().y()+30,
                             widget_parent->geometry().width()-30,
                             widget_parent->geometry().height()-30);
    widget_parent->setLayout(myLayout);
    widget_parent->show();

        QList<QRect> *dummy=new QList<QRect>;
        dummy->append(widget_parent->geometry());
        dummy->append(widgetChild->geometry());
        for (int i=0;i<dummy->size();i++){
            std::cout << dummy->value(i).x()<< "\t"
                      << dummy->value(i).y()<< "\t"
                      << dummy->value(i).height()<< "\t"
                      << dummy->value(i).width() <<  "\n"; //std::endl
        }
    return a.exec();
}
über setGeometry() lässt sich die Größe des childWidgets nicht verändern. Außerdem sind die Koordinaten des childWidgets verschoben. Aus der Ausgabe folgt:
parentWidget: 100 100 480 640 (halt wie oben festgelegt)
childWidget: 11 11 458 618 (hier wahrscheinlich durch das Layout verändert)

kann man die Layout-Größe gleich der parent_widget-Größe setzen sodass

Code: Alles auswählen

childWidget.geometry()=[0 0 480 640]
ist.

Re: child and parent-widgets

Verfasst: 30. Mai 2013 13:35
von archer
Im Layout kannst du die Ränder einstellen mit setMargin() oder setContentsMargins(),
dann mußt du garnichts herumrechnen.

Re: child and parent-widgets

Verfasst: 4. Juni 2013 09:01
von Gora
Danke für die Hilfe Problem gelöst.