Принудительное использование 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
}
Другие вопросы по тегам