Seite 1 von 1

[Gelöst] QVBoxLayout Widget nach oben hin ausrichten

Verfasst: 28. Januar 2015 17:06
von bierber
Hallo,

ich versuche gerade ein QVBoxLayout so zu befüllen, das die Layouts nicht am Center ausgerichtet werden sondern an der Oberkante.

Hierfür habe ich folgendes gemacht.

Deklarieren von 2 QVBoxLayouts, die in ein QHBoxLayout eingebttet werden.(HBoxLayout ist ganze Form größe, die 2 VBoxLayouts teilen sich 50% der Fläche)

Code: Alles auswählen

	
lHLayout = new QHBoxLayout(this);

lVLayout_Name = new QVBoxLayout();
lVLayout_Data = new QVBoxLayout();
lHLayout->addLayout(lVLayout_Name,1);
lHLayout->addLayout(lVLayout_Data,1);

Einbinden der Widget's in das jeweilige BoxLayout:

Code: Alles auswählen

lVLayout_Name->addWidget(lbNbrWelds,1,Qt::AlignTop);
Ich bin nun eigentlich davon ausgegangen, das durch das Qt::AlignTop, die Widgets von oben her angeordnet werden. Leider werden sie immer noch von der Mitte her gefüllt:

Also Ein Widget liegt genau in der Mitte des Layouts

Bei 2 Widgets liegt das erste etwa 1/3 unterhalb der Oberkante des Layouts und das zweite Widget etwa 2/3 unterhalb der Oberkante des Layouts.

Ich möchte aber das die Widgets von oben her angeordnet werden, also 5px vom oberen Rand, dann das Widget, dann das nächste Widget wieder 5px vom letzten Widget und so weiter. So füllt sich das Layout dann von oben her langsam auf.

Hab ich da einen Denkfehler oder kann das QBoxLayout das gar nicht so wie ich das möchte?

Gruß und Danke
Felix

Re: QVBoxLayout Widget nach oben hin ausrichten

Verfasst: 28. Januar 2015 17:15
von odt
ich habe Deine Frage nicht ganz gelesen/verstanden, aber vielleicht hilft ein

Code: Alles auswählen

lVLayout_Name->addStretch( 1 );
wobei das 1 beim vorherigen .. vermutlich ein 0 sein sollte.

Code: Alles auswählen

lVLayout_Name->addWidget(lbNbrWelds,[b]1[/b],Qt::AlignTop);

Re: QVBoxLayout Widget nach oben hin ausrichten

Verfasst: 28. Januar 2015 17:29
von bierber
Nein es geht ja nicht um die Stretch Faktoren, sondern um die Anordnung der Widgets auf dem Layout.

Den Stretch Faktor lege ich ja beim hinzufügen der Widgets bereits auf 1.

Re: QVBoxLayout Widget nach oben hin ausrichten

Verfasst: 28. Januar 2015 17:46
von odt
Das Layout versucht den ganzen Platz auszunutzen, d.h. er verteilt die Widgets gemäss den Stretch-Faktoren gleichmässig. Wenn alle Stretch-Faktoren gleich sind, gibt es das von Dir beschriebene Verhalten. Wenn Du die Widgets mit Stretch=0 einfügst und anschliessend layout->addStretch( 1 ) addest, vergibt er den überschüssigem Platz dem nicht sichtbaren Stretch-Item und die Widgets werden von oben angeordnet.

Code: Alles auswählen

	QHBoxLayout* root = new QHBoxLayout( this );
	QVBoxLayout* spalte1 = new QVBoxLayout();
	root->addLayout( spalte1, 1 );
	QVBoxLayout* spalte2 = new QVBoxLayout();
	root->addLayout( spalte2, 1 );
	spalte1->addWidget( new QLabel( "1" ) );
	spalte1->addWidget( new QLabel( "2" ) );
	spalte1->addStretch( 1 );
	spalte2->addWidget( new QLabel( "3" ) );
	spalte2->addWidget( new QLabel( "4" ) );
	spalte2->addWidget( new QLabel( "5" ) );
	spalte2->addWidget( new QLabel( "6" ) );
	spalte2->addStretch( 1 );

Re: QVBoxLayout Widget nach oben hin ausrichten

Verfasst: 29. Januar 2015 07:14
von bierber
Ah jetzt hab ichs verstanden.

Danke!