Seite 1 von 1

QGroupBox Widget Position

Verfasst: 16. April 2008 12:05
von jd
Hallo Gemeinde,

Ich habe eine QGroupBox die n viele QWidgets beinhaltet. Ich habe das Problem, das es einfach hässlich aussieht. Derzeit sieht das ganze so aus:
http://imageupload.com/~imageupl/show.p ... 1.png.html

Ich will das aber so hin biegen, das es so aussieht: http://imageupload.com/~imageupl/show.p ... 2.png.html

Natürlich ohne das MainWindow zu verkleinern.

Mein Code für die Ansicht die "hässlich" ist:

Code: Alles auswählen

QGridLayout *diskSpaceGridLayout = new QGridLayout;

// Begin - Schleife
hddProgressBar[i]->setMaximumSize(200, 20);
hddIconLabel[i]->setPixmap(QPixmap(":/images/harddisk.png"));
hddInfoLabel[i]->setText(infoText);
hddIconLabel[i]->setWordWrap(true);
diskSpaceGridLayout->addWidget(hddIconLabel[i], i, 0);
diskSpaceGridLayout->addWidget(hddProgressBar[i], i, 1);
diskSpaceGridLayout->addWidget(hddInfoLabel[i], i, 2);
// End - Schleife
Das layout habe ich dann der GroupBox zugewiesen.

Wie kann ich ganze so hin quetschen, das nicht mehr solche übertrieben großen Zwischenräume mehr habe?

so long
jd

Verfasst: 16. April 2008 12:21
von PeterLustig
Mach die GroupBox kleiner. Die Widgets dürfen nicht höher sein als 20, aber die GroupBox ist sehr viel größer als 5x20. Also muss eben ein Freiraum dazwischen..

Verfasst: 16. April 2008 12:22
von Christian81
Und / oder bau einen expanding QSpacer unten rein wie ich es im designer meist mache.

Verfasst: 16. April 2008 12:23
von upsala
Beschäftigt euch beide mal mit Layouts...

Verfasst: 16. April 2008 12:25
von macman
Sollen die Widgets in der Groupbox nur zusammenrücken, dann füge das NACH deiner Schleife ein:

Code: Alles auswählen

diskSpaceGridLayout->setRowStretch(i+1,1);
i muss einen größer sein, als die Rows die Du hinzugefügt hast.

Soll die GroupBox kleiner sein, dann nimm ein QSpacerItem im Layout vom Mainwindow.

Verfasst: 16. April 2008 12:27
von PeterLustig
Nach seinem Bild zu urteilen hat er garkein Layout im Hauptfenster, darum soll er die Groupbox einfach kleiner machen. Besser wär natürlich wenn er dort auch ein geeignetes Layout einbaut..

Verfasst: 16. April 2008 14:35
von jd
Ich denke ich habe da ein Layout. In meinem QMainWindow habe ich ein CentraWidget, in diesem Widget ist main Layout(ist ein QGridLayout) in diesem Layout werden nun alle GroupBoxes platziert. Die GroupBox (siehe Screenshot) Muss sich automatisch anpassen. Da ich nie weiß wie viele rows dort sind. Nur eins ist fix das ich 3 Colums habe (logo->progressBar->infoText). Ich habe das jetzt irgendwie hin bekommen, das es nach meinen Wunsch aussieht, was ich aber mehr oder weniger auf Try&Error belief. Also ich weiß nicht wirklich was ich da gemacht habe.

Als erstes habe ich bei der Progressbar die Min und Max größe gleich gesetzt:

Code: Alles auswählen

hddProgressBar[i]->setMaximumSize(200, 20);
hddProgressBar[i]->setMinimumSize(200, 20);
So mit haben die schon mal eine Größe die Fix ist.

Dann habe ich einfach main Hauptlayout (falls das eins ist) verändert, da ich im Moment nur eine GroupBox habe, habe ich das so gemacht.

Code: Alles auswählen

layoutGridLayout->setRowStretch(1, 1);
layoutGridLayout->setColumnStretch(1, 1);
So passt sich auch die GroupBox an.

Und so setze ich das Layout:

Code: Alles auswählen

centralwidget->setLayout(layoutGridLayout);

Ich weiß nur nicht ob das der Optimale weg ist, da ich nicht wirklich verstehe was ich da mache, denke ich mal das es "klump" ist.

Ich habe mir die Docu zu Layouts durch gelesen, da es aber anscheinend unendlich Wege gibt ans ziel zu gelangen steige ich da irgendwie nicht durch. Habt ihr Verbesserungen für mich, oder mal ein Beispiel? Ich meine Code über Layout lesen ist die eine Sache, aber was visuelles ist da denke ich mal ehr von Vorteil ich kann mir unter Stretch oder Verhalten von Spacern einfach nichts vorstellen, weiß zwar wie ich es schreiben muss, bringt mir aber nicht viel, wenn ich nicht weiß was raus kommt.

so long

Verfasst: 16. April 2008 15:12
von macman
jd hat geschrieben:Ich meine Code über Layout lesen ist die eine Sache, aber was visuelles ist da denke ich mal ehr von Vorteil ich kann mir unter Stretch oder Verhalten von Spacern einfach nichts vorstellen,
Man muss den Designer nicht nutzen, bei variablem GUI geht es auch gar nicht, aber zum testen ist er unschlagbar.