使用 QQmlApplicationEngine 强制 QApplication 处于前台

Force QApplication using QQmlApplicationEngine to be on foreground

我试图强制我的应用程序保持在所有内容之上,即使其他进程弹出也是如此。这是我的 main:

的简化版本

main.cpp

QApplication                        app{argc, argv};
QQmlApplicationEngine               engine;

engine.load(QUrl{"qrc:/file.qml"});

return app.exec();

我需要 WindowsLinux 的解决方案。但是优先考虑前者,似乎没有 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 returns true 但是好像不行。外部进程在启动后仍然出现在应用程序之上。

加载的 QML 文件在 FullScreen 上设置了 visibility。它的类型是 ApplicationWindow.

没关系,这很简单:

setWindowFlags(Qt::WindowStaysOnTopHint) hides Qt Window

因此我在 file.qml:

中写了这个
ApplicationWindow
{
    visibility: "FullScreen"
    flags: Qt.WindowStaysOnTopHint
}