Forum: PC-Programmierung QT-Designer: Felder linksbündig plazieren


von Mehmet K. (mkmk)


Angehängte Dateien:

Lesenswert?

Servus allerseits

Wenn es auch mit der QT-Kodierung sehr gut vorangeht: mit dem 
QT-Designer kann ich mich einfach nicht anfreunden.
Weiss gar nicht was ich dazu schon alles gelesen und mir auf Youtube 
alles angeschaut habe.
Zuletzt hatte ich auf Youtube "Qt DevDays 2011" in Sachen Widgets and 
Layouts gefunden. Und dachte mir: das is' es!
War's aber auch nicht.

Mein Problem: um zum Layout im Bild 2 (scr_2.jpg) zu gelangen (also alle 
LineEdits linksbündig), muss ich zuerst einen Zwischenschritt einlegen 
und diese Widgets in ein Vertikal-Layout setzen. Dadurch wird aber die 
Breite aller Widgets gleichgesetzt.
Im 2. Schritte,  führe ich ein Break-Layout aus, um dann die Weiten 
aller Felder manuell wieder anzupassen.
Ich haette mir gedacht, ich könnte sizePolicy auf horizontal fixed 
stellen, um die Werte nicht mehr neu einstellen zu müssen.
Geht aber nicht: diese Policy wird vom Vertical-Layout nicht beachtet.

Kann mir aber irgendwie nicht vorstellen, dass ein ansonsten so gut 
durchdachtes Konzept nur eine solche 2. schrittige Lösung bereithaelt.
Waere nett, wenn mir jemand unter die Arme greifen könnte.

von Karl H. (kbuchegg)


Lesenswert?

Mehmet Kendi schrieb:

> Mein Problem: um zum Layout im Bild 2 (scr_2.jpg) zu gelangen (also alle
> LineEdits linksbündig), muss ich zuerst einen Zwischenschritt einlegen
> und diese Widgets in ein Vertikal-Layout setzen. Dadurch wird aber die
> Breite aller Widgets gleichgesetzt.

Ich seh jetzt noch nicht, was daran so schlimm ist, wenn die gleich lang 
sind. So passen sich die Dinger wenigstens automatisch an, wenn der 
Benutzer den Dialog in die Breite zieht.
Ich kenne allerdings eine Menge Programme, bei denen der Designer nicht 
mitgedacht hat, und man Texteingaben in dafür viel zu kleine Felder 
machen muss und man daher vom Text immer nur 20% sieht.

von Mehmet K. (mkmk)


Lesenswert?

Dein Bedenken ist zwar richtig, aber meine Dialoge setze ich stets auf
1
this->setFixedSize(this->width(), this->height());
weshalb das von Dir vorgebrachte Problem bei mir nicht eintrifft.

von Rolf Magnus (Gast)


Angehängte Dateien:

Lesenswert?

Mehmet Kendi schrieb:
> Mein Problem: um zum Layout im Bild 2 (scr_2.jpg) zu gelangen (also alle
> LineEdits linksbündig), muss ich zuerst einen Zwischenschritt einlegen
> und diese Widgets in ein Vertikal-Layout setzen. Dadurch wird aber die
> Breite aller Widgets gleichgesetzt.

Ob ein Widget im Layout linksbündig ist, kann man ja für jedes Widget 
getrennt einstellen. Aber das ist vermutlich nicht dein Problem, sondern 
eher, daß die Sizepolicy der Labels links dafür sorgt, daß die immer den 
restlichen verfügbaren Platz ausfüllen. Du mußt halt rechts noch einen 
Spacer reinmachen, damit der den Platz ausfüllt, dann sieht das so aus 
wie im Anhang.

Mehmet Kendi schrieb:
> Dein Bedenken ist zwar richtig, aber meine Dialoge setze ich stets
> aufthis->setFixedSize(this->width(), this->height());
> weshalb das von Dir vorgebrachte Problem bei mir nicht eintrifft.

Das ist ja noch viel schlimmer! Dialoge, deren Größe sich nicht ändern 
läßt, sind die Pest.
Da hat Qt so ein schönes Layout-System, bei dem sich alles anpassen 
kann, und dann werden irgendwelche Größen auf einen fixen Wert 
gezwungen.

Mehmet Kendi schrieb:
> Ich haette mir gedacht, ich könnte sizePolicy auf horizontal fixed
> stellen, um die Werte nicht mehr neu einstellen zu müssen.
> Geht aber nicht: diese Policy wird vom Vertical-Layout nicht beachtet.

Also bei mir funktioniert es, wenn ich die SizePolicy auf fixed setze, 
und zwar unabhängig davon, ob das jetzt direkt in einem Grid-Layout oder 
noch einem separaten Verical-Layout mache.

von Karl H. (kbuchegg)


Lesenswert?

Rolf Magnus schrieb:

> Da hat Qt so ein schönes Layout-System, bei dem sich alles anpassen
> kann, und dann werden irgendwelche Größen auf einen fixen Wert
> gezwungen.

was einen dann ab und an schon mal zwingt, die Monitor-Auflösung 
kurzerhand wieder runterschrauben zu müssen, damit man was lesen kann. 
Das heißt, wenn dann der Dialoginhalt überhaupt noch ins Dialogfenster 
passt.

Altes Leiden: Ein GUI-Designer stellt alles so ein, dass es auf seinem 
Schirm gut aussieht. Dass es auch andere Bildschirmauflösungen oder gar, 
Gott bewahre, andere Schriftgrößen gibt, interessiert ihn nicht.

> Das ist ja noch viel schlimmer! Dialoge, deren Größe sich nicht ändern
> läßt, sind die Pest.

Und noch 'pestiger' sind die, die sich Größe und Position von einem 
Programmlauf zum nächsten nicht merken können. Genauso wie die, die sich 
die einmal mühsam eingestellte Spaltenaufteilung in einer Listbox nicht 
merken oder den Pfad, auf dem man zuletzt gespeichert hat, etc. etc.


Ich hau bei Qt einfach Spacer rein. Obwohl ich bei älteren Qt Versionen 
mit dem Designer auch schon oft am kämpfen war, haben wir beide (der 
Designer und ich) immer noch einen Kompromiss gefunden :-)

: Bearbeitet durch User
von Rolf Magnus (Gast)


Lesenswert?

Karl Heinz schrieb:
>> Das ist ja noch viel schlimmer! Dialoge, deren Größe sich nicht ändern
>> läßt, sind die Pest.
>
> Und noch 'pestiger' sind die, die sich Größe und Position von einem
> Programmlauf zum nächsten nicht merken können.

Ja, wobei man bei der Position aufpassen muß. Ich hatte auch schon 
Programme, die sich die gemerkt haben, aber leider war die auf dem am 
Laptop angeschlossenen externen Monitor, der als Zweitbildschirm dran 
war. Unterwegs kommt man dann mangels Zweitmonitor auf einmal nicht mehr 
an das Fenster ran.

> Genauso wie die, die sich die einmal mühsam eingestellte
> Spaltenaufteilung in einer Listbox nicht merken oder den Pfad, auf dem
> man zuletzt gespeichert hat, etc. etc.

Ja, richtig. Das läßt sich bei Qt ja mit QSettings sehr schön einfach 
und elegant machen.

von Mehmet K. (mkmk)


Angehängte Dateien:

Lesenswert?

Wegen meinem Layout hatte ich bis anhin noch nie irgendwelche 
Reklamationen. Ohne fixes Layout arbeite ich nur bei Reports. Werde aber 
das von Euch Reklamierte mal im Hinterkopf behalten und auf mich 
einwirken lassen.

@Magnus
In Deinem Beispiel sind die Labels alle gleich breit. Sitzt es deshalb 
wie angegossen?
Mit Spacer arbeite ich. Aber in diesem Fall brachten sie keine Lösung.

Kannst Du bitte mir step-by-step sagen, wie ich vorgehen muss? Was ich 
gemacht habe:
- alle Widgets placiert (scr_1.png)
- alle Lables auf AlignRight gesetzt + Vertical-Layout (scr_2.png)
- alle LineEdits: SizePolicy auf HorizontalPolicy-Fixed gesetzt.

Okay, was sind nun meine naechsten Schritte?

von Mehmet K. (mkmk)


Angehängte Dateien:

Lesenswert?

Hopala, was sind denn das für Bilder? Versuche die Bilder nochmals 
hochzuladen.

von Philip K. (philip_k)


Lesenswert?

Der Spacer muss schon mit ins Layout, sonst hat der freilich keinen 
Effekt. Also für jede Zeile Label, LineEdit und Spacer in eine 
HBoxLayout und dann alle HBoxLayouts in ein VBoxLayout.
Oder aber alle Labels und LineEdits in ein FormLayout und dieses dann 
mit dem Spacer in ein HBoxLayout.

Mehmet Kendi schrieb:
> Wegen meinem Layout hatte ich bis anhin noch nie irgendwelche
> Reklamationen.
Die meisten Leute sind es eben gewohnt, mit schlecht designten GUIs zu 
arbeiten ;-)

von Rolf Magnus (Gast)


Angehängte Dateien:

Lesenswert?

Mehmet Kendi schrieb:
> In Deinem Beispiel sind die Labels alle gleich breit. Sitzt es deshalb
> wie angegossen?

Geht auch mit unterschiedlich langen Labels. Siehe Bild.

> - alle Widgets placiert (scr_1.png)
> - alle Lables auf AlignRight gesetzt + Vertical-Layout (scr_2.png)

Wieso denn? Mach die doch mit den LineEdits zusammen in ein GridLayout.

> - alle LineEdits: SizePolicy auf HorizontalPolicy-Fixed gesetzt.
>
> Okay, was sind nun meine naechsten Schritte?

- Ein GridLayout drum
- Einen Spacer in eine eigene Spalte dieses Layouts stecken

Ich hänge mal mein Beispiel-ui-File mit an, aber ich weiß nicht, ob du 
das mit deinem Designer öffnen kannst, wenn du eine andere Version hast.

von Mehmet K. (mkmk)


Lesenswert?

Sorry für das Schweigen. Der Blutdurck war plötlich im Keller und ich im 
Bett.

von Mehmet K. (mkmk)


Angehängte Dateien:

Lesenswert?

Servus Magnus.

Danke für dein Beispiel! Hat bei mir sofort ein Aha-Erlebnis ausgelöst!

Jetzt habe nur noch ein Problem:
Wie kriege ich die Labels rechtsbündig? Wie ich Deinem Beispiel 
entnehme, hast Du an deren Alignments nichts geaendert. Bei mir ist 
alles linksbündig: scr_1.png

von Mehmet K. (mkmk)


Lesenswert?

Rolf Magnus schrieb:
> Dialoge, deren Größe sich nicht ändern läßt, sind die Pest.

Philip K. schrieb:
> Die meisten Leute sind es eben gewohnt, mit schlecht designten GUIs zu
> arbeiten ;-)

Karl Heinz schrieb:
> Und noch 'pestiger' sind die, ...

Ich mach mal dafür einen neuen Beitrag auf.

von Rolf Magnus (Gast)


Lesenswert?

Mehmet Kendi schrieb:
> Wie kriege ich die Labels rechtsbündig?

Du stellst sie im Layout auf rechtsbündig.
Rechtsklick auf das Widget -> "Ausrichtung des Layouts" -> Rechts.

von Mehmet K. (mkmk)


Lesenswert?

Geil!! Jetzt hat's endlich geklappt.
Und auch im Nachhinein, wo jetzt alles klar ist, muss ich eignestehen: 
alleine haette ich es nicht geschafft. Nochmals vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.