Qt-neue Fenster korrekt auf dem Bildschirm, center über Maus, gehen Sie in den Bildschirm
Nach vielen Monaten versucht, die Suche, die Beurteilung von Codes, etc. Ich bin nicht in der Lage, eine Lösung zu finden, um richtig zu positionieren Sie ein neues Fenster in QT. In meinem einfachsten Fall möchte ich einfach nur, um die endgültige Größe der Fenster und zentrieren Sie es unter der Maus. Es wird verschoben werden, um sicherzustellen, dass kein Teil der Fenster außerhalb des Bildschirms. Ich möchte nicht die Fenster erscheinen Sie dann in die richtige position bewegen, erzeugt visual rütteln, vor allem mit desktop-FX eingeschaltet.
Die Probleme, die ich angetroffen habe, von denen nicht alle haben die richtigen Lösungen:
-
frameGeometry ist nicht immer aufgefüllt, bevor das Fenster wurde zuvor dargestellt.
-
frameGeometry ist manchmal einfach völlig falsch ist, insbesondere auf Windows 7.
-
Vor der Anzeige ist es nicht möglich zu wissen, ob sizeHint oder Größe angewendet werden, oder etwas anderes dazwischen. Das heißt, die Größe, die Politik scheint nicht vorhersehbar.
Beachten Sie, dass ich weiß, wie ich zum speichern/wiederherstellen der geometrie eines zuvor erstellten Fensters. Trotz QT Mängel auch hier habe ich eine funktionierende Lösung.
Beachten Sie auch, dass ich nicht verwenden können, die Standard-Fenster-manager Platzierung. Für nicht-MDI-Anwendungen auf einem multi-monitor-setup Ihre Platzierung ist schrecklich (oft nicht einmal auf dem gleichen monitor wie die Maus).
Ich möchte auch vermeiden, sub-classing alle widgets und-Dialoge nur um die Lösung implementieren, als wäre es nicht allgemein. Wenn dies der einzige mögliche Weg ist dann wäre ich bereit, ihn zu prüfen (sollten event-Filter auch nicht eine option sein).
Hat jemand gute brauchbare Lösungen?
- Mein Aktueller Bearbeiten. Das erste edit war unsicher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeitet sehen eher wissenschaftlich: habe ich geändert, das beliebige Anzahl von anrufen zu
processEvents
mit einer Schleife, die den Rückgabewert überprüft.Wieder bearbeitet: Es scheint, dass die neue version nicht sicher: es kann stecken bleiben in der Schleife. Also ich habe ein limit in der Anzahl der Iterationen.
Original:
Erzählen Sie mir davon. Wenn ich kann gestattet werden, Zitat aus meinem eigenen code:
Versuchen, diese mit unterschiedlichen Nummern Anrufe zu
processEvents
. (In dieser Aufrufe, die verschiedenen sub-widgets und sub-sub-widgets Größe, die sich selbst rekursiv.)while
Schleife, die ich seither verwendet, um fix einen anderen, ähnlichen problem.Bezug auf das problem der nicht in der Lage, um die Abfrage ein Fenster, dessen Größe vor Ihr gezeigt, gibt es eine einfache Lösung. Sie können das Fenster verschieben, um irgendwo weit außerhalb des Bildschirms, bevor es zu zeigen. Zum Beispiel Mitte ein Hauptfenster auf dem primären Bildschirm ohne flackern ich Folgendes tun:
Habe ich nur getestet dieser code auf Windows XP-und Qt 4.8.x. Hoffentlich funktioniert es auf anderen Plattformen.
Haben Sie versucht, die Aktivierung des layout. Es zwingt Sie berechnen Größen und Positionen
QLayout::activate()
nach diesem Anruf, Ihre widgets haben sollten, Ihre richtige Größe.