Qt5 предоставляет функциональные возможности для этого, метод QWindow::setScreen
устанавливает экран, на котором должно отображаться окно.
Любой виджет предоставляет доступ к этому указателю через QWidget::windowHandle()
:
QWidget * widget = new QWidget();
auto screens = qApp->screens();
// compute the index
widget->windowHandle()->setScreen(screens[index]);
widget->showFullScreen();
Чтобы получить номер экрана, вы можете использовать положение мыши и предположить, что экран с мышью - это экран с текущим фокусом:
QPoint globalCursorPos = QCursor::pos();
int mouseScreen = qApp->desktop()->screenNumber(globalCursorPos);
Итак, окончательный кодможет быть что-то вроде этого:
QWidget * widget = new QWidget();
const auto globalCursorPos = QCursor::pos();
const auto mouseScreen = qApp->desktop()->screenNumber(globalCursorPos);
widget->windowHandle()->setScreen(qApp->screens()[mouseScreen]);
widget->showFullScreen();
Windows
Если этот подход не соответствует вашим потребностям, вам потребуется выполнить некоторые вызовы ОС.
Например, в Windows вы можете использовать MonitorFromWindow
:
HMONITOR active_monitor_number = MonitorFromWindow(GetActiveWindow(), MONITOR_DEFAULTTONEAREST);
Если вам нужна дополнительная информация об экране, вы можете использовать Qt или GetMonitorInfo
.
Я не являюсь разработчиком Mac OS X, но может существовать аналогичный API