Native title bar size for proper window placement ?
-
Hi,
What exactly are you experiencing ?
You can position it a 0.0 or at the center of the screen.
-
The thing is, we desire to spawn the window exactly at the position centered on top of the parent. But we don't want to cross the screen boundaries. Therefore we want to have the frame aligned with the screen edges.
The problem now is that using setFramePosition(0,0) sometimes sets it a few pixels too much to the right of the left screen border.
-
Why not use your main window geometry to place your other widget ?
-
This is the behaviour we want:
This is the behaviour we see:
Isn't there a way to get the desired outcome with a normal Qt function that just handles these cases for us?
Like a flag RespectScreenBordersEdit: Please note that the desired rectangles in the second picture is what we get. I forgot to change the labels to "Result"
-
No there's not. You can put your windows outside of the screen on purpose or you could be placing them in a secondary screen.
Can you show the code you use to move the widgets around ?
-
our current code calculates the new window geometry() using availableGeometry().
then we setGeometry() to resize and reposition the window in its constructor. This doesn't take the window titlebar into account though.So we just add 32 to our min y in order to make space for the titlebar. this works just fine on windows 10. but we want to support any platform equally.
Using setFramePosition() works well in that regard, unless we set it to (0,0). That's when we see the behavior in the picture above to the top left. And having it at the bottom obviously lets it go too far down into the taskbar.
the best solution would be to only use setFramePosition when our calculated new position is (newpos < frameheight). But we can't get the frame margins without opening the window first and the mainwindow doesn't provide these margins.
-
You should use frameGeometry.
-
Thanks, that seems to work. Although it's weird that frameMargins().left() returns a number way too high on my scaling (13). The top() is correct with 58 on my setup.
This makes the frame still show the horizontal displacement. I'll have to just force it to 0 and use a combination of setGeometry and setPosition to work around this. -
@SGaist said in Native title bar size for proper window placement ?:
You should use frameGeometry.
How do you mean?
frameGeometry()
is a getter, but there is no corresponding setter. -
@Violet-Giraffe That was to retrieve the information and use it in the following calculations.