Приложение Qt GUI на macOS: как найти текущий активный экран? - PullRequest
1 голос
/ 21 марта 2019

Мы разрабатываем приложение macOS, графический интерфейс которого основан на Qt.

При запуске мы хотим show() QMainWindow в определенном месте на текущем активном экране (с учетом многоэкранных систем).

Есть ли способ получить QScreen, представляющий текущий активный экран?

Из нашего теста QGuiApplication::primaryScreen() является первым экраном (что соответствует названию), но мы не можем найти эквивалент для активного экрана.

1 Ответ

1 голос
/ 21 марта 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...