使用QQmlApplicationEngine强制QApplication在前台

时间:2017-03-14 14:59:56

标签: windows qt qqmlapplicationengine setforegroundwindow

即使其他进程弹出,我也试图强制我的应用程序始终处于最重要的位置。这是我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返回true,但似乎无效。外部流程在启动后仍会显示在应用程序之上。

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

1 个答案:

答案 0 :(得分:0)

没关系,这很简单:

setWindowFlags(Qt::WindowStaysOnTopHint) hides Qt Window

因此我在 file.qml

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