Я пытаюсь заставить свое приложение оставаться на вершине всего, даже когда появляются другие процессы. Вот упрощенная версия моего main
:
main.cpp
QApplication app{argc, argv};
QQmlApplicationEngine engine;
engine.load(QUrl{"qrc:/file.qml"});
return app.exec();
Мне нужно решение как для Windows
, так и для Linux
. Однако приоритет отдается первому, и, похоже, решения Qt
не существует. Вот что я пробовал:
#ifdef _WIN32
HWND hCurWnd = ::GetForegroundWindow();
DWORD dwMyID = ::GetCurrentThreadId();
DWORD dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);
::AttachThreadInput(dwCurID, dwMyID, TRUE);
::SetWindowPos(hCurWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
::SetWindowPos(hCurWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
bool ok = ::SetForegroundWindow(hCurWnd);
LOG_INFO() << ok;
::AttachThreadInput(dwCurID, dwMyID, FALSE);
::SetFocus(hCurWnd);
::SetActiveWindow(hCurWnd);
#endif
ok
возвращает true
, но, похоже, это не работает. Внешние процессы все равно появляются поверх приложения после его запуска.
Загруженный файл QML
имеет visibility
значение FullScreen
. Его тип ApplicationWindow
.