child and parent-widgets

Alles rund um die Programmierung mit Qt
Antworten
Gora
Beiträge: 10
Registriert: 24. Mai 2013 16:16

child and parent-widgets

Beitrag 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.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: child and parent-widgets

Beitrag 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.
Gora
Beiträge: 10
Registriert: 24. Mai 2013 16:16

Re: child and parent-widgets

Beitrag 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.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: child and parent-widgets

Beitrag von archer »

Im Layout kannst du die Ränder einstellen mit setMargin() oder setContentsMargins(),
dann mußt du garnichts herumrechnen.
Gora
Beiträge: 10
Registriert: 24. Mai 2013 16:16

Re: child and parent-widgets

Beitrag von Gora »

Danke für die Hilfe Problem gelöst.
Antworten