Layouts vergrößern sich selbständig (leider)

Alles zu Entwicklungsumgebungen und Editoren für Qt
ff-fan
Beiträge: 21
Registriert: 14. Januar 2011 17:15

Layouts vergrößern sich selbständig (leider)

Beitrag von ff-fan »

Hallo,

ich bin dabei eine GUI mit dem QtCreator zu erstellen.
Dabei habe ich immer das gleiche Problem.

Ich würde gerne zwei horizontale Bänder benuten, die sich mit einander ausrichten,
also jede Zelle ist gleich groß und stehen genau übereinander, z.B.:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Dazu nehme ich bisher ein Layout (z.B. Formlayout) und zwei HorizontalLayouts
untereinander und setze für jede Zahl ein QLabel ein.

Dabei entsteht schon einmal das erste Problem, dass die Zelle einer einstellige Zahl
kleiner ist als die einer zweistelligen.

Was aber noch schlimmer ist, sobald ich eine Zahl z.B. die "18" editiere verändern sich
die Horizontalen Layouts. Habe schon alles ausprobiert, Kombinationen mit Frames,
Widget, versucht die Zellen als Labels oder Buttons, herum gespielt mit den sizePolicies
und LayoutSizeConstraints, aber ich habe keine Kombination gefunden, bei der das
Layout einfach konstant seine Form behält.

Wahrscheinlich ist es ein ganz einfaches Verständnisproblem meinerseits, aber es
ist zum verzweifeln. Kann jemand mein Problem nachvollziehen und weiß die Lösung?

Vielen Dank im voraus für eine Antwort oder einen hilfreichen Tipp!

Grüsse
ff-fan
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von upsala »

Du verwendest für obiges Beispiel 3 Layouts? Warum kein QGridLayout?
Außerdem ist dein Problem nicht nachvollziehbar, warum hängst das ui-File nicht an, mit dem du das Problem hast?
ff-fan
Beiträge: 21
Registriert: 14. Januar 2011 17:15

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von ff-fan »

Hallo,

ich dachte diese Erfahrung haben schon viele gemacht und es passiert ja auch dauernd.

Einfach im QtCreator ein HorizontalLayout einfügen, ein paar Pushbuttons hinein (z.B. 5 Stück und numerieren 1,2,3,4,5), dann das HorizontalLayout so stauchen, dass alle PushButtons _quadratisch_ werden (so hätte ich es gerne dauerhaft - normalerweise sind ja die Buttons eher länglich rechteckig). Dann bei einem Button die Nummer ändern und schwupp hat sich das Layout wieder ausgedehnt, so dass alle Button's länglich rechteckig sind.

Nun kann man ja sagen bei Buttons ist die Größe/Form festgelegt. Darum habe ich das ganze auch mit Labels ausprobiert. Diese kann man ja beliebig vorher stauchen, z.B. Platz für zwei Ziffern. Doch auch da kommt es zum automatisierten Ausdehnen.

Noch ein anderes Probleme zu diesem Thema:
Jetzt wollte ich mittels GridLayout unter jeder Zahl eine Checkbox (ohne Text) legen - möglichst zentriert, so daß es ein gutes Bild ergibt. Klappt auch nicht. Die Checkboxen lassen sich leider nicht zentrieren. Deshalb hatte ich dann 2 HorizontalLayouts verwendet (eine für die Nummern, einer für die Checkboxen). Aber leider funktioniert hier das WYSIWYG nicht. Die Checkboxen sind gegenüber den Nummern leicht horizontal verschoben. :-(

Gruss
ff-fan
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von Christian81 »

Die Buttons gehen nunmal in ihre Preferrend Size zurück - das ist der Sinn eines Layouts. Definiere die Buttons mit festen Größen und fertig. Aber eckige Pushbuttons sind eigentlich QToolButtons ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ff-fan
Beiträge: 21
Registriert: 14. Januar 2011 17:15

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von ff-fan »

Christian81 hat geschrieben:Die Buttons gehen nunmal in ihre Preferrend Size zurück - das ist der Sinn eines Layouts. Definiere die Buttons mit festen Größen und fertig. Aber eckige Pushbuttons sind eigentlich QToolButtons ...
Hallo,

danke für die Antwort.

Habe gerade eben einmal ToolButtons versucht...hmm, ich ziehe einen ToolButton auf die Form, vergrößere ihn auf meine gewünschte Größe und ziehe ihn dann in ein Layout (Grid oder Form), dann wird dieser Button _automatisch_ verkleinert. (Müsste man dafür vielleicht eine anderes Layout nehmen? Die QButtonGroup-Klasse kann man ja leider nicht per QtCreator auf die Form ziehen)

Wie kann man den Buttons eine feste Größe zuordnen, so dass diese im Layout erhalten bleibt?

Und noch eine Frage dran gehängt:
Gibt auch die Möglichkeit indiziert auf die Items/Objects der Layouts zu zugreifen? z.B. HorizontalLayout[1] oder so? z.B. um die Hintergrundfarbe oder sonstiges zu Laufzeit für alle Items nur in diesem Layout zu verstellen...

Grüße

ff-fan
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von Christian81 »

Ein Widget hat eine minimum und eine maximum size. Die kann man auch im Designer setzen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von upsala »

Und noch eine Frage dran gehängt:
Gibt auch die Möglichkeit indiziert auf die Items/Objects der Layouts zu zugreifen? z.B. HorizontalLayout[1] oder so? z.B. um die Hintergrundfarbe oder sonstiges zu Laufzeit für alle Items nur in diesem Layout zu verstellen...
Ja, gibt es schon mal die Dokus zu den entsprechenden Layout angeschaut?
ff-fan
Beiträge: 21
Registriert: 14. Januar 2011 17:15

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von ff-fan »

upsala hat geschrieben:Ja, gibt es schon mal die Dokus zu den entsprechenden Layout angeschaut?
also:
Layout Management:
http://doc.qt.nokia.com/latest/widgets-and-layouts.html
bzw. Using Layouts in Qt Designer:
http://doc.qt.nokia.com/latest/designer ... orm-layout
hat mich bzgl. meines Problems gar nicht weiter gebracht

Unter:
Layout Management:
http://doc.qt.nokia.com/latest/layout.html

steht zwar was von Items, aber ich wollte auf die Label-Objekte, Button-Objekte usw. zugreifen,
nicht nur auf die Layout-Werte.

Hat wirklich keiner diese Probleme? (Ausrichtung, Zentrierung von Items?)
also derzeit gibt es für mich zwei unschöne Lösungen:
1. Zahlen in Labels senkrecht eintragen bzw. 1\n2 für 12 => Spaltenbreite immer gleich
2. Damit Checkboxen bei verschiedenen Spaltenbreiten (Zahlen ein- oder zweistellig)
trotzdem zentriert bleiben, ein Gridlayout so verwenden:
Label 1 Label 2
leer chkbox leer leer chkbox leer
=> macht Tabelle aber wesentlich komplizierter bei vielen Spalten...
hier als ui-Datei zum Angucken
MainWindow_ChkBoxenZentriert.ui
(10.76 KiB) 357-mal heruntergeladen
Gruss
ff-fan



Gruss

ff-fann
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von Christian81 »

Das ui sieht doch ok aus - wo ist jetzt das Problem?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von franzf »

Du hast die allgemeinen Dokumente zu Layouts angesehen - schön.
Schau mal z.B. nach QLayout::itemAt, und QLayoutItem::widget()...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von Christian81 »

Außerdem hat jedes Widget einen Namen über das man dieses normalerweise anspricht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ff-fan
Beiträge: 21
Registriert: 14. Januar 2011 17:15

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von ff-fan »

Hallo Chrisitan81 und franzf,

erst mal danke für Eure Mithilfe.
Christian81 hat geschrieben:Das ui sieht doch ok aus - wo ist jetzt das Problem?
Zum einen blähen die zusätzlichen Layouts die ui-Datei mächtig auf und wenn ich sagen wir mal 35 von diesen Kombinationen Zahlen + Checkboxen nebeneinander haben würde, dann nimmt es zuviel Platz weg.
Beispiel: MainWindow_ChkBoxenZentriert_2.ui:
[/quote]
MainWindow_ChkBoxenZentriert_2.ui
(66.29 KiB) 357-mal heruntergeladen
Man bräuchte hier pro Spalte nur den Platz einer zweistelligen Zahl. Wenn man hier nun das äussere "hLayout" soweit staucht (habe extra links und rechts Margin-Platz eingebaut zum besseren anklicken) sind plötzlich die Checkboxen nicht mehr richtig sichtbar und sobald man nun eine neue Zahl irgendwo eingibt z.B. aus der 4 eine 5 macht, bläht sich das zuvor gestauchte hLayout wieder auf! (Thema: Layouts vergrößern sich selbständig (leider))
Christian81 hat geschrieben:Außerdem hat jedes Widget einen Namen über das man dieses normalerweise anspricht.
franzf hat geschrieben:Du hast die allgemeinen Dokumente zu Layouts angesehen - schön.
Schau mal z.B. nach QLayout::itemAt, und QLayoutItem::widget()...
Da die Zahlen-Labels und Checkboxen ja immer aus den selben Klassen bestehen, wäre es toll sie einfach in einer Schleife indiziert verändern zu können. (verstecken, Farbe ändern, Werte setzen usw.)
z.B. widgetLayout.itemAt(4).setText("14")

Mit Namen zugreifen heisst:
1. Widgetnamen möglichst gleich und richtig nummeriert anzusetzen.
2. Dann Namen in QString zusammenbauen z.B. QString wName = QString("Zahl_%1").arg(QString::number(i);
3. dann per findChild den Zeiger auf widget finden (pWidget = ui->findChild (wName ))
4. dann erst kann man das widget bearbeiten...ziemlich kompliziert und fehleranfällig finde ich.

Grüße
ff-fan
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von Christian81 »

Dann halte Dir die Pointer zu den einzelnen Widgets in einer Struktur und greife über die Struktur drauf zu. Oder nimm nicht den Designer und erstelle die Layouts dynamisch damit Du die Namen nicht aus Versehen falsch machst.
Und was an

Code: Alles auswählen

QLabel *l = findChild<QLabel*>("Blub_1")
l->setText("42")
So umständlich sein soll weiß ich nicht.
Ich glaube eher Dir fehlt ein Konzept und Du schiebst es auf die Programmiersprache - ich sehe zumindest kein wirkliches Problem hier.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ff-fan
Beiträge: 21
Registriert: 14. Januar 2011 17:15

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von ff-fan »

Christian81 hat geschrieben:Dann halte Dir die Pointer zu den einzelnen Widgets in einer Struktur und greife über die Struktur drauf zu. Oder nimm nicht den Designer und erstelle die Layouts dynamisch damit Du die Namen nicht aus Versehen falsch machst.
Mein Intention war aber von Anfang an den Designer zu nehmen und zwar mit folgendem Konzept.
Christian81 hat geschrieben: So umständlich sein soll weiß ich nicht.
Ich glaube eher Dir fehlt ein Konzept und Du schiebst es auf die Programmiersprache - ich sehe zumindest kein wirkliches Problem hier.
Um eins klar zu stellen:
Ich will gar nichts schieben. Weder auf die Programmiersprache C++, noch auf das Qt-Framework.
Wenn man sich so eine Tabelle mühsam per QtCreator zusammenklickt und dann beim Starten der Anwendung feststellen muß, das sie nun anders aussieht, ist es schon ein Problem. (...und wenn sizePolicies auf fixed nicht hilft)

Mein Konzept ist die maximale Anzahl von Labels (Zahlen) mit darunter zentriert anliegenden Checkboxen einmal _IM DESIGNER_ anzuordnen, um diese dann in der Anwendung zur Laufzeit verändern zu können.
(hinsichtlich Anzahl, Aussehen und Inhalt)
Dabei entsteht das als Thema benannte Problem, das man sogar mit der von mir mit angehängten MainWindow_ChkBoxenZentriert_2.ui nachvollziehen kann, wenn man will. (Stauchen, Label verändern, Layout vergrößert sich wieder) Zu diesem Problem, so hatte ich gehofft, kann mir irgend jemand eine Erklärung und vielleicht auch eine Lösung anbieten.

Mittlerweile habe ich durch probieren herausgefunden, dass man die Checkbox zentriert hinbekommen kann, in dem man sie noch einmal allein in ein Gridlayout einbettet und fixiert. Wenn man es so macht, dann springt auch das Layout nicht mehr auf. (Thema)
MainWindow_ChkBoxenZentriert_3.ui
(25.15 KiB) 345-mal heruntergeladen
Anhand des Objectbrowsers kann man allerdings sehen, wie komplex die Struktur schon dieser kleinen Tabelle geworden ist. (und es sollten ja noch mehr werden)

Gruss
ff-fan
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Layouts vergrößern sich selbständig (leider)

Beitrag von Christian81 »

Was soll der Layoutmanager denn machen wenn Du das Fenster vergrößern willst?
Wenn ich mir Dein UI so anssehe kapiere ich immer noch nicht warum ein einfaches QGridLayout nicht ausreicht. Noch zwei Spacer und fertig...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten