繁体   English   中英

使任务栏图标在窗口隐藏时可见

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM