[英]make taskbar icon visible on window hide
我试图在最小化窗口后使我的应用程序的任务栏图标可见。 我的窗口可以通过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);
这并没有回答最初的问题,但对于从 Google 来到这里的任何人:我遇到了问题,在我的窗口上使用 hide() 之后,当我通过 show()(或实际上的任何其他方式)再次显示它时,它不会不会在任务栏中再次获得自己的图标。 每次通过我最初用来打开窗口的加载程序重新打开窗口时,我都必须设置瞬态父级 = null:
graphLoader.item.transientParent = null
graphLoader.item.show()
这样窗口再次获得自己的任务栏图标,我也可以通过 Alt+Tab 在两个窗口之间切换
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.