Seite 1 von 1
Vertut sich QFormLayout um ein paar Pixel?
Verfasst: 24. Februar 2010 01:40
von sieben
Hallo!
Ich versuche (eigentlich dynamisch) ein paar (Zahlen-)Einstellungen eines Objekts editierbar zu machen. Dazu verwende ich einen Dialog, in dem ein QFormLayout mit mehreren Labels und QSpinBox'es vorkommt.
Während es programmtechnisch ganz gut funktioniert, kann ich mir nicht helfen: Irgendetwas sieht komisch aus. Und zwar scheint das QLabel ein paar Pixel zu hoch angesetzt zu sein.
Ich habe das jetzt im Designer nachgestellt und da passiert das Gleiche... Bei dem QLineEdit ist es nicht ganz so offensichtlich.
===> siehe Anhang
Alle Einstellungen sind Standard, d.h. es sollte eigentlich fein vertikal zentriert werden...
Muss das so aussehen? Ist das ein Fehler? Bin ich zu pingelig?
Was kann man tun?
Benutze Ubuntu/GNOME.
Vielen Dank im Voraus für Meinungen, Klärungen, Vorschläge oder andere hilfreiche Kommentare.
edit:
Habe jetzt mal alle Styles durchprobiert, die ich bei mir finde, und mit einigen passiert dies nicht und es sieht schön zentriert aus, nämlich qtCurve und qtc_klearlooks. Beim Motif-Style allerdings fällt es noch viel deutlicher auf...
Verfasst: 24. Februar 2010 09:28
von franzf
Verfasst: 24. Februar 2010 10:10
von Exasperation
Siehe Link von franzf... Dein Label wird standardmäßig oben links in dem ihm vorgegebenen Raum platziert... Da das Label ne kleinere Höhe hat, als die Spinbox, sitzt das Label folglich etwas höher

Alignment anpassen und die Sache passt

Verfasst: 24. Februar 2010 10:22
von franzf
Ach, lass ihn das doch selber rausfinden. So lernt er das Dokulesen doch nie

Verfasst: 24. Februar 2010 21:21
von sieben
Diese Einstellung bezieht sich auf die Ausrichtung ALLER Widgets innerhalb des Layouts.
Wenn ich das auf "vertikal-zentriert" stelle, ändert sich der Dialog nur insofern, als dass sich dann das im Einzelnen Falsche insgesamt in der Mitte befindet.
Ach, lass ihn das doch selber rausfinden. So lernt er das Dokulesen doch nie
Na, da scheine ich mich ja in diesem Fall schon ein wenig besser auszukennen...
Ich habe erst hier gefragt, als ich die Doku mir nicht weiter geholfen hat.
Ich lese im Übrigen die Doku die ganze Zeit.
Mir zu unterstellen, das ich das nicht täte, finde ich unfreundlich, arrogant und wenig hilfreich. Aber egal.
Hat jemand andere Vorschläge?
Könnte es vielleicht sein, dass es in 4.6 behoben ist? Ich habe nämlich nur 4.5.2, weil das die Version ist, die gerade über das Paketsystem bei Ubuntu kommt... Wie gesagt, bei einigen (wohl eher KDE-mäßigen?) Styles passt alles perfekt...
Verfasst: 24. Februar 2010 21:55
von upsala
Im übrigen hat das QGridLayout das selbe Verhalten.
Verfasst: 25. Februar 2010 07:12
von Exasperation
Ich vermute mal so wie in meinem Anhang möchtest du es haben...
Stichwort ist QGridLayout, da passt alles...
Im Übrigen würde ich uns nicht als arrogant, unfreundlich und wenig hilfreich bezeichnen... wir hätten in unserer unbarmherzigen Arroganz auch deinen Beitrag ignorieren können, aber haben vorsichtshalber Mal auf die Doku verwiesen, was du uns auch noch übel genommen hast
Es gibt genug Amateure die es nicht schaffen auch nicht die einfachsten Dinge nachzuschlagen...
Hey aber das seltsame Verhalten von QFormLayout war mir auch nicht bekannt

Wie gesagt, bei QGridLayout passt es

Verfasst: 25. Februar 2010 09:21
von franzf
Ich weiß nicht wie du darauf kommst, dass bei einem QFormLayout die labels vertikal zentriert sind, das steht nirgendwo in der Doku! Die sind immer top! Daraus ergibt sich, dass das Problem nicht an Qt sondern am Style liegt, der für label/lineedit/combobox/... unterschiedliche Höhen setzt.
Mit etwas mehr Experimentierfreude hättest du mal was richtig fettes als Widget reingebaut, z.B. ein QDial. Da wird es klar und deutlich ersichtlich.
Desweiteren habe ich leider den falschen Link gepostet. Das sollte natürlich nicht formAlignment werden sondern labelAlignment. Deshalb auch der ironische (nicht arrogante!) Kommentar. Mit Doku lesen hättest du nämlich das hier erkannt:
labelAlignment : Qt::Alignment
This property holds the horizontal alignment of the labels.
Das Einstellen eines vertikalen Alignment ist also deaktiviert. Jeder Versuch über die Methoden von QLayout scheitert (QLayout::setAlignment(alignment), QLayout::setAlignment(QWidget*, alignment)).
Im übrigen ist eine Umfrage nicht das probate Mittel, um eine Lösung für ein Problem herbeizuführen. Das wirkt leider recht noobisch (auch etwas arrogant - sry...). Zusammen mit den fehlenden Infos (was hast du bereits versucht, welche Properties hast du angefasst, usw.) eröffnete sich mir das Bild eines Anfängers, der einfach noch nicht in die Doku geschaut hat. Das ist hier leider an der Tagesordnung.
Verfasst: 25. Februar 2010 11:53
von sieben
Also ich habe jetzt QGridLayout benutzt. Vielen Dank für die kompetente Hilfe!
Sorry, das mit der Umfrage war nur ein Spaß.
Und ich bin ein Amateur, nur eben einer, der immer brav die Doku liest.
Und die ist wirklich richtig, richtig gut - hatte bisher auch kaum Probleme...
Allerdings ist das Verhalten von QFormLayout dann tatsächlich ein bisschen merkwürdig... Ein "Formular" sähe m. E. doch deutlich besser aus, wenn die Label und anderen Widgets gegeneinander zentriert würden... Egal!
Nochmals dankeschön!
Verfasst: 25. Februar 2010 15:31
von franzf
sieben hat geschrieben:Ein "Formular" sähe m. E. doch deutlich besser aus, wenn die Label und anderen Widgets gegeneinander zentriert würden...
Für primitive Formulare, die nur ein QLineEdit oder ne Combobox haben vllt. schon.
Zum Beispiel sollen verschieden Datensätze zum Editieren angeboten werden. U.A. existieren für Adresse, berufliche Stationen usw. schon fertige Widgets (unser FormLayout soll die alle auf einer Seite darstellen.).
Wenn da alle Zeilen vertikal zentriert wären, gäbe das ein ziemlich unübersichtliches Bild, es wäre ziemlich unbenutzbar. Von Haus aus also vertikal zentrieren ist nicht.
Ist aber sicher kein Grund das vertikale Alignment komplett zu deaktivieren. ->BugReport?
Wie dem auch sei, du kannst dir selber Code dafür schreiben. Kapsel das Hinzufügen in einer eigenen Methode. hol dir die Höhe des Labels und des Widgets, nimm die Differenz und pass den Margin des Labels an

Wird aber deutlich mehr Code als nur mit QGridLayout
