Layout Grundlagen

Das Layout, also die Anordnung der Widgets, ist für die Benutzerfreundlichkeit ein unablässiges Werkzeug. Natürlich kann man dies mit Hilfe des RAD-Tools (Qt-Designer) auf eine einfach Art und Weise in geringerer Zeit erledigen, dennoch ist das Prinzip für das Qt-Programmieren wichtig.

Es gibt drei wichtige Layout Klassen mit denen man fast alle Anordnungen der Buttons, Fenster usw. realisieren kann.

layout

In diesem Bild werden diese eingesetzt. QVBoxLayout wird für die vertikale, QHBoxLayout für die horizontale Ausrichtung verwendet und in QGridGroup werden die Buttons in einer Gruppe , neben und untereinander angeordnet.
Will man einer Gruppe Buttons noch einen Rahmen geben, benötigt man QGroupBox. Die Realisierung ist simpel und logisch.

Ein kurzes Beispiel mit QVBoxLayout.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18

#ifndef MYLAYOUT_H
#define MYLAYOUT_H
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QGroupBox>

class MyLayout : public QWidget
{
public:
MyLayout();
private:
QPushButton *but1, *but2, *but3, *but4;
QVBoxLayout *AllBox;
QVBoxLayout *VBox1, *VBox2;
QGroupBox *VGroup1, *VGroup2;
};
#endif

layout1

Hier wurden die benötigten Buttons und Layouts deklariert.

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42


MyLayout::MyLayout()
{
but1 = new QPushButton("Button1");
but2 = new QPushButton
("Button2");
but3 = new QPushButton
("Button3");
but4 = new QPushButton
("Button4");
VBox1 = new QVBoxLayout
;
VBox2 = new QVBoxLayout
;
AllBox = new QVBoxLayout;
VGroup1 = new QGroupBox
("QVBoxLayout1");
VGroup2 = new QGroupBox("QVBoxLayout2");
VBox1->addWidget(but1);
VBox1->addWidget(but2);
VBox2->addWidget(but3);
VBox2->addWidget(but4);
VGroup1->setLayout(VBox1);
VGroup2->setLayout(VBox2);
AllBox->addWidget(VGroup1
);
AllBox->addWidget(VGroup2);
setLayout(AllBox);
setWindowTitle("Basic Layouts");
}
Und hier wurden im Konstruktor des Widgets, die Buttons im Layout angeordnet. Wie Sie gesehen haben, werden die Elemente immer mit addWidget() dem Layout übergeben. Das Prinzip ist immer das gleiche, man arbeitet sich von innen nach außen. D.h. man erstellt zuerst die Buttons und steckt diese in die gewünschte Anordnung.