Bildschirmauflösung bei Qt berücksichtigen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
superschlau
User
Beiträge: 26
Registriert: Mittwoch 4. April 2018, 09:12

Salü zäme
Ich habe nun ein paar Applikationen mit Qt5 erstellt.
Ich stelle nun fest, dass die Fenster bei unterschiedlichen PC mit natürlich unterschiedlichen Bildschirmgrössen und Bildschirmauflösungen unterschiedlich in der Grösse aussehen. Wenn ich auf dem Laptop ein schön lesbares Fenster erhalte, so zeigt sich auf dem Desktop ein "Riesenfenster", auf dem im Bildbereich nicht mal alles dargestellt wird. Da müsste ich gar noch Scroll-Bars einbauen, um das ganze Fenster nutzen zu können.
Ich denke, es muss doch eine Möglichkeit geben, mit der automatisch alle Abstände der aktuellen Bildschirmgrösse angepasst werden kann. Ich habe da aber nichts gefunden.
Jetzt weiss ich nicht, ich da was nicht richtig gemacht oder ich etwas gescheites nicht gefunden habe.
Ich habe die Fenster mit dem Qt-Designer erstellt und mich nicht um Abstände gekümmert, sondern die Widgets einfach auf der Fensterfläche verteilt.

Gerne erwarte ich eure Antworten und Anregungen.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Frei verteilen geht nicht, du musst dich mit dem Layout-System von Qt beschaeftigen. Das ist alles gut erklaert und vom Designer unterstuetzt. Und *meistens* auch recht einfach, doof kann es werden, wenn man an tiefer verschachtelte Layouts ran will - da habe ich teilweise die dann einmal aufloesen muessen, und dann wieder erstellt. Mag aber auch mangelnde Kenntnis sein.

Das Grundprinzip: du entscheidest, ob Widgets horizontal, vertikal oder im Schachbrett angeordnet sind. Um zu strukturieren gibt es dann noch Frames und Spacer, sowie EInstellungen der Widgets selbst, wievie Raum die haben wollen, und sich beim vergroessern verhalten, etc.
superschlau
User
Beiträge: 26
Registriert: Mittwoch 4. April 2018, 09:12

Nun, das mag sein, dass frei verteilen nicht geht...

Mein Problem ist aber ein anderes. Ich habe beschäftigt und weitere Versuche gemacht. Folgendes habe ich festgestellt:
1) Wenn ich am Desktop (mit normaler Bildschirmauflösung) ein Fenster definiere (QtDesigner), dann erscheint das Bild korrekt auf diesem PC.
2) Auf meinem Laptop mit hoher Auflösung erscheint die gleiche Definition zusammengedrückt und verkleinert (nicht wirklich lesbar).
3) Auf dem Laptop setzte ich nun, vor dem Aufruf der Qt-Applikation folgenden Befehl ab:

Code: Alles auswählen

PyQt5.QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)
Damit erscheint das auf dem PC erstellt Fenster auch auf dem Laptop korrekt.
4) In umgekehrter Reihenfolge, eine Definition eines Fensters auf dem Laptop ergibt auf dem Desktop ein 4 mal vergrössertes Bild (unbrauchbar). Leider habe ich keinen Befehl gefunden, welcher nun das Bild korrekt verkleinert.

Meine Fragen:
1) Offenbar werden die Geometrie in Qt in Pixel abgelegt, so dass je nach vorhandener Grafikkarte andere Werte verwendet werden. Ist das richtig?
2) Ist es möglich diese Geometrie mit "unabhängigen Werten zu gestalten? Unabhängig währe in diesem Sinn eine Abstand in einem metrischen Mass...
3) Gibt es eine Möglichlickeit die Qt-Definition so zu gestalten, dass diese unabhängig der Auflösung der Grafikausgabe richtig funktioniert??
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

1) Ja, das scheint wohl so zu sein.
2) Ja, indem Du ein Layout verwendest.
3) Mit Layouts sollte es überall richtig eingezeigt werden.
superschlau
User
Beiträge: 26
Registriert: Mittwoch 4. April 2018, 09:12

Gehe ich richtig in der Annahme, dass "Layout" ein Gestaltungselement innerhalb eines Fensters ist (Vertical Layout, Horizontal Layout, Grid Layout oder Form Layout)?
Ja ich weiss, wenn du diese meinst, wird die Anordnung innerhalb des Forms geregelt.
Wie sieht es dann aber mit der Grösse des Forms selber aus? Diese Verändert sich bei unterschiedlichen Bildschirmauflösung nämlich auch.....
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auch dafür. Müssen wir das noch 20mal spielen, bevor du uns glaubst?
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hier hast du mal ein Beispiel. Kann beliebig resized werden, das Widget oben fuellt alles aus, und die Buttons bleiben unten rechts bzw links. https://pastebin.com/qDmfSKLs
Antworten