We want to get rid of QDesktopWidget, so we also need to provide an alternative to creating toplevel windows with a QDesktop(Screen)Widget as the parent in order to have them created on the correct screen.
Assuming a virtual desktop with two screens, 0 to the left and 1 to the right. Code like:
This should make the toplevel window open up on the presumably left-most screen, no matter if
- screen 0 is part of a virtual desktop group
- there are other application windows already open on another screen
- the mouse cursor is on the second screen
Maximizing the window should maximize it on that screen; restoring it should bring it back to the previous position on that screen. The widget should have the devicePixelRatio of screen 0.
While the toplevel widget is visible, calling
should NOT move the visible window to the second screen. However, maximizing the window should now fill the second screen; restoring it from there should restore it back to the previous geometry.
Assuming a multi-head setup, ie. no virtual desktop (and only relevant on X11 or Wayland), both calls to QWidget::setScreen should result in the window being placed on the second screen.
Qt has QWindow::setScreen, but QWidget typically doesn't return a valid QWindow from windowHandle() until it's "too late", ie until the widget is becoming visible.