使用 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();
我需要 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
returns true
但是好像不行。外部进程在启动后仍然出现在应用程序之上。
加载的 QML
文件在 FullScreen
上设置了 visibility
。它的类型是 ApplicationWindow
.
没关系,这很简单:
setWindowFlags(Qt::WindowStaysOnTopHint) hides Qt Window
因此我在 file.qml:
中写了这个
ApplicationWindow
{
visibility: "FullScreen"
flags: Qt.WindowStaysOnTopHint
}
我试图强制我的应用程序保持在所有内容之上,即使其他进程弹出也是如此。这是我的 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
returns true
但是好像不行。外部进程在启动后仍然出现在应用程序之上。
加载的 QML
文件在 FullScreen
上设置了 visibility
。它的类型是 ApplicationWindow
.
没关系,这很简单:
setWindowFlags(Qt::WindowStaysOnTopHint) hides Qt Window
因此我在 file.qml:
中写了这个ApplicationWindow
{
visibility: "FullScreen"
flags: Qt.WindowStaysOnTopHint
}