打开应用程序主窗口 在系统托盘图标中的其他应用程序之上
Open Application main window On top of other applications from systray icon
Qt 应用程序最小化。 UI在QML上实现,应用程序窗口作为主窗口。
当我右键单击托盘中的应用程序图标时,会显示一个菜单。其中一个菜单项是"打开"。单击它时,将调用此代码(很可能是冗余的(:
mainWidget->activateWindow();
window->showNormal();
Qt::WindowState newWindowState = (Qt::WindowState)((window->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
window->setWindowState(newWindowState);
如果在双击托盘图标时调用相同的代码,应用程序窗口将打开,但仍保留在其他应用程序下。
如何补救?
qDebug() << "GetCurrentThreadId: " << GetCurrentThreadId();
qDebug() << "windowFlags: " << mainWidget->windowFlags();
qDebug() << "windowState: " << window->windowState();
mainWidget->activateWindow();
window->showNormal();
Qt::WindowState newWindowState = (Qt::WindowState)((mainWindow()->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
window->setWindowState(newWindowState);
qDebug() << "GetCurrentThreadId: " << GetCurrentThreadId();
qDebug() << "windowFlags: " << mainWidget->windowFlags();
qDebug() << "windowState: " << window->windowState();
成功打开应用程序时的输出:
[16:00:17] [D] GetCurrentThreadId: 1092
[16:00:17] [D] windowFlags: QFlags<Qt::WindowType>(Popup|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowCloseButtonHint|WindowFullscreenButtonHint)
[16:00:17] [D] windowState: Qt::WindowState(WindowMinimized)
[16:00:17] [W] QWindow::setWindowState does not accept Qt::WindowActive
[16:00:17] [D] GetCurrentThreadId: 1092
[16:00:17] [D] windowFlags: QFlags<Qt::WindowType>(Popup|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowCloseButtonHint|WindowFullscreenButtonHint)
[16:00:17] [D] windowState: Qt::WindowState(WindowNoState)
当窗口保留在其他应用程序下时输出:
[16:00:23] [D] GetCurrentThreadId: 1092
[16:00:23] [D] windowFlags: QFlags<Qt::WindowType>(Popup|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowCloseButtonHint|WindowFullscreenButtonHint)
[16:00:23] [D] windowState: Qt::WindowState(WindowMinimized)
[16:00:23] [W] QWindow::setWindowState does not accept Qt::WindowActive
[16:00:23] [D] GetCurrentThreadId: 1092
[16:00:23] [D] windowFlags: QFlags<Qt::WindowType>(Popup|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowCloseButtonHint|WindowFullscreenButtonHint)
[16:00:23] [D] windowState: Qt::WindowState(WindowNoState)
找到一个可行的解决方案 https://stackoverflow.com/a/41565553/3569069
for ( QWindow* appWindow : qApplication.allWindows() )
{
appWindow->show(); //bring window to top on OSX
appWindow->raise(); //bring window from minimized state on OSX
appWindow->requestActivate(); //bring window to front/unminimize on windows
}
编辑 1.上述方法在窗口行为方面存在小问题。最后,它是这样完成的:
QWindow* mainWindow = qApp->topLevelWindows()[0];
mainWindow->show();
mainWindow->raise();
mainWindow->requestActivate();
相关文章:
- 在Visual Studio中单实例Qt应用程序版本5.11.1中,在所有其他窗口的顶部打开Qt MainWindow
- C++ - 从 MFC 应用程序启动记事本,并将其默认标题从 "Untitled - Notepad" 更改为其他内容
- 从 Windows 中的其他应用程序 GUI 中提取数据
- 打开应用程序主窗口 在系统托盘图标中的其他应用程序之上
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- Xlib XSENDEVENT在其他应用程序/过程中
- CreateProcess:某些应用程序运行其他应用程序
- 我的COCOS2D游戏开始,而不是其他音乐应用程序停止
- Create_task():称为“接口”的应用程序,该接口已编辑为其他线程进行编组
- 全球安装的键盘钩可防止键盘输入其他应用程序
- 如何将OpenCV的输出显示或流式传输到HTML页面或其他一些客户端应用程序
- 创建 COM 接口指针在开发计算机上有效,但会导致其他计算机上的应用程序崩溃
- Cython 带 STL 矢量和没有 NumPy 可以从其他应用程序调用,缺少什么?
- 其他静态阵列破坏了OMAPL138目标(CCS5.2)上的DSP应用程序
- 我可以在OpenFrameWorks中调用应用程序以外的其他内容
- 如何在 Linux 应用程序中专门使用其他键盘
- 与其他应用程序的交互
- 关键部分,如果是多线程应用程序中的其他条件
- 默认的Qt控制台应用程序不会"Hello World"...或做任何其他事情
- 是否有预处理器宏可以让我知道应用程序是控制台类型还是其他类型