【发布时间】:2017-12-03 02:12:45
【问题描述】:
Qt 应用程序最小化。 UI 在 QML 上实现,ApplicationWindow 作为主窗口。
当我右键单击托盘中的应用程序图标时,会显示一个菜单。菜单项之一是“打开”。单击它时,会调用此代码(很可能是多余的):
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)
【问题讨论】:
-
你能在这两种情况下用你的调试器检查 newWindowState 的值吗?
-
我知道您已经找到了解决方案,但是如果您检查它并感兴趣为什么以前的方法不起作用,我可能会有一个有趣的答案;)
-
我在两种情况下都得到了相同的结果(添加到描述中)。你隐藏的东西很有趣)