使用 QQmlApplicationEngine 强制 QApplication 处于前台
Posted
技术标签:
【中文标题】使用 QQmlApplicationEngine 强制 QApplication 处于前台【英文标题】:Force QApplication using QQmlApplicationEngine to be on foreground 【发布时间】:2017-03-14 14:59:56 【问题描述】:我试图强制我的应用程序保持在所有内容之上,即使在其他进程弹出时也是如此。这是我的main
的简化版:
main.cpp
QApplication appargc, 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) hides Qt Window
因此我在我的 file.qml 中写了这个:
ApplicationWindow
visibility: "FullScreen"
flags: Qt.WindowStaysOnTopHint
【讨论】:
以上是关于使用 QQmlApplicationEngine 强制 QApplication 处于前台的主要内容,如果未能解决你的问题,请参考以下文章
QQmlApplicationEngine 没有发出警告信号
QQmlApplicationEngine 列表索引超出范围问题