我试图在最小化我的窗口后使我的应用程序的任务栏图标可见。我的窗口可以通过
show()
或showFullScreen()
来显示,所以我隐藏窗口的代码是:
w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint);
我也尝试过
w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint | Qt::Tool | etc);
但仍然相同:应用程序已最小化,但任务栏上没有图标。
从这里我了解到
setWindowFlags
:
注意:当更改窗口的标志时,此函数会调用 setParent(),从而导致窗口小部件被隐藏。您必须调用 show() 才能使小部件再次可见
但是我不能使用
show()
,因为我想隐藏它。
如何做到这一点?我应该使用 WinApi 还是有我错过的 QT 方式? (
Qt::WindowStaysOnTopHint
旗帜是必要的)
UPD1:我实现了自己的系统托盘,因为我需要任务栏上的图标
UPD2:我已经尝试过
showMinimized()
和setWindowState(Qt::WindowMinimized)
。在第一种情况下,任务栏上有图标,但恢复窗口后(由 showFullScreen()
显示)有窗口控件:最小化、关闭。标题等。在第二种情况下,它会按照我的意愿最小化并正确恢复,但任务栏上没有图标。
好吧,我做了我想做的事。但我为此使用了WinApi。希望这对某人有帮助。所以,毕竟
为了最小化我使用以下东西:
ShowWindow(hwnd, SW_SHOWMINIMIZED);
为了恢复到“之前”状态,我使用:
widget->show();
// or
widget->showFullScreen();
设置 stayOnTop 标志是通过以下方式完成的:
// SWP_NOMOVE | SWP_NOSIZE are for ignoring 3rd, 4th, 5th, 6th parameters of the SetWindowPos function
SetWindowPos(hwnd, stayOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
这并没有回答原来的问题,但对于来自谷歌的任何人来说:我遇到了问题,在我的窗口上使用 hide() 后,当我通过 show() (或实际上任何其他方式)再次显示它时不会再在任务栏中获得自己的图标。 每次通过我最初用来打开窗口的加载器重新打开窗口时,我都必须设置transientParent = null:
graphLoader.item.transientParent = null
graphLoader.item.show()
这样窗口再次获得自己的任务栏图标,我还可以通过 Alt+Tab 在两个窗口之间切换