Принудительное использование QApplication с использованием QQmlApplicationEngine.
Я пытаюсь заставить мое приложение оставаться на вершине всего, даже когда появляются другие процессы. Вот упрощенная версия моего 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
,
1 ответ
Решение
Как ни крути, это было просто:
setWindowFlags (Qt:: WindowStaysOnTopHint) скрывает окно Qt
Поэтому я написал это в моем файле file.qml:
ApplicationWindow
{
visibility: "FullScreen"
flags: Qt.WindowStaysOnTopHint
}