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

问题描述 投票:0回答:2

我试图在最小化我的窗口后使我的应用程序的任务栏图标可见。我的窗口可以通过

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()
显示)有窗口控件:最小化、关闭。标题等。在第二种情况下,它会按照我的意愿最小化并正确恢复,但任务栏上没有图标。

c++ qt winapi
2个回答
0
投票

好吧,我做了我想做的事。但我为此使用了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);
    

0
投票

这并没有回答原来的问题,但对于来自谷歌的任何人来说:我遇到了问题,在我的窗口上使用 hide() 后,当我通过 show() (或实际上任何其他方式)再次显示它时不会再在任务栏中获得自己的图标。 每次通过我最初用来打开窗口的加载器重新打开窗口时,我都必须设置transientParent = null:

graphLoader.item.transientParent = null
graphLoader.item.show()

这样窗口再次获得自己的任务栏图标,我还可以通过 Alt+Tab 在两个窗口之间切换

© www.soinside.com 2019 - 2024. All rights reserved.