Seite 1 von 1
Dialog Start Position festlegen
Verfasst: 21. April 2008 17:15
von pospiech
Ich habe einen Dialog der beim Anzeigen zur Hälfte nicht auf dem Bildschirm erscheint. Warum ist mir unklar.
Daher wüsste ich gerne was die Startposition (Anzeigeposition) eines Dialogs festlegt und ob es spezielle Methoden gibt Dialoge auf dem Bildschirm anzuordnen oder zu zentrieren?
(und ja, ich habe in der Suche und der Doku zu QDialog geschaut)
Verfasst: 21. April 2008 17:24
von Christian81
Verfasst: 21. April 2008 18:17
von pospiech
Das Problem ist, das man manchmal wissen muss wo man suchen soll.
Jetzt nutze ich frameGeometry() zum Abfragen und stelle fest das der Wert bei 0 oder <0 liegt. Wenn ich aber nur über setGeometry(WindowRect); einen neunen Wert zuweise dann ist das ja nicht identisch mit frameGeometry. Eine Funktion setFrameGeometry konnte ich hingegen nicht finden.
Wie weist man dann die frameGeometry zu ?
Verfasst: 21. April 2008 18:41
von Christian81
Ich weiss nicht genau was Du machen willst, aber vielleicht hilft
http://doc.trolltech.com/4.3/geometry.html schon weiter - wenn nicht, bitte genauer beschreiben.
Re: Dialog Start Position festlegen
Verfasst: 22. April 2008 07:31
von macman
pospiech hat geschrieben:Ich habe einen Dialog der beim Anzeigen zur Hälfte nicht auf dem Bildschirm erscheint. Warum ist mir unklar.
Den Fehler solltest Du aber zuerst suchen. Im Kontruktor deines Dialoges sollte zuerst setupUi(this) kommen und nichts anderes. Ansonsten zum sichern und wiederherstellen der Position saveGeometry und restoreGeometry.
Anpassungen mit setGeometry, falls Auflösungswechsel stattfand und der Dialog nicht korrekt angezeigt wird. setFrameGeometry braucht man nicht unbedingt, da man Unterschiede zu geometry berechnen und in geometry einfliessen lassen kann.
Verfasst: 22. April 2008 09:09
von pospiech
Im Konstruktor steht als erstes ein setupUi(this). Was ich mache ist von MainWindow aus dem Menu heraus einen Dialog zu starten. Dessen Startgeometry ist anscheint abhängig von der Position von MainWindow. Wenn MainWindow relativ weit oben am Bildschirm ist, dann wird der Dialog höher gestartet. Irgendwann ist die geometry dann so, dass ein Teil der Dialogs außerhalb des Bildschirms gezeichnet wird. So dass also folgendes zutrifft
Code: Alles auswählen
QRect WindowRect= this->frameGeometry();
if (WindowRect.top() < 0 )
...
Verfasst: 22. April 2008 10:52
von PeterLustig
Schau dir mal "mapToGlobal" an.