Qt und C++, Buttons quadratisch in Grid ausrichten?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Wenn der Container einem Quadrat entspricht, brauchen die Button im Layout nur noch expandieren.

Beispiel:

QWidget* buttonWidget = new QWidget;
buttonWidget->setMaximumSize(QSize(400, 400));

QGridLayout* buttonLayout = new QGridLayout();

for (int row = 0; row < 2; ++row) {
  for (int column = 0; column < 2; ++column) {
    QPushButton* button = new QPushButton("Button");
    button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    buttonLayout->addWidget(button, row, column);
  }
}

buttonWidget->setLayout(buttonLayout);

Andersherum könntest du aber auch jedem Button eine bestimmte Größe zuordnen. Das würde allerdings bedeuten, dass bei zu geringer Größe große Lücken entstehen oder sich die Elemente bei zu größerer Größe verzerren.

In dem Zusammenhang kannst du dir auch noch Size Constraints anschauen.

AOMkayyy 
Fragesteller
 04.06.2022, 22:24

Vielen Dank, auf die SizePolicy bin ich auch gestoßen und ich habe es mehr oder weniger auch hinbekommen, aber ich weiß nicht, ob mein Weg der konventionelle/richtige war.

Ich habe nun auch den in QtCreator integrierten Designer entdeckt und wollte fragen, ob du mir sagen könntest, wie dort die Struktur ist und wie man richtig auf diese zugreift.

Ich habe einerseits die widget.ui und dann noch die cpp und Header file mit der Widget class, welche das Widget und die Kinder enthalten(?). Aber wo werden diese ganzen Informationen für mich einsehbar und manipulierbar (außerhalb von dem grafischen Designer) gespeichert? Ich sehe kein Code der die Pushbuttons und andere Widgets generiert. Und wie mach ich das mit Events (bzw. Slot und Signals?). Ich habe jetzt einfach eine Funktion geschrieben, die mir das jeweilige Kind zurückgibt, sodass ich aus meiner main classe darauf zugreifen und Events hinzufügen kann. Ich kann mir aber nicht vorstellen, dass das so gedacht ist.

Falls du noch Lust und Zeit hättest mir das zu beantworten, dann wäre ich dir sehr dankbar!

0
regex9  05.06.2022, 14:53
@AOMkayyy

Wenn du den Designer nutzt, werden die UI-Daten in der .ui-Datei im XML-Format serialisiert. Sie werden automatisch von Qt ausgewertet, sodass du trotzdem auf dasselbe Ergebnis kommst, als würdest du die Anweisungen im C++-Code geben.

Signals and Slots kannst du im Designer ebenfalls konfigurieren. In der Dokumentation gibt es einen Artikel, der es genauer erklärt: Qt Designer's Signals and Slots Editing Mode.

1