【问题标题】:make taskbar icon visible on window hide使任务栏图标在窗口隐藏上可见
【发布时间】:2016-09-26 17:30:48
【问题描述】:

我试图在最小化我的窗口后使我的应用程序的任务栏图标可见。我的窗口可以通过 show()showFullScreen() 显示,所以我隐藏窗口的代码是:

w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint);

我也试过了

w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint | Qt::Tool | etc);

但还是一样:应用程序已最小化,但任务栏上没有图标。

here我了解到setWindowFlags

注意:此函数在更改窗口的标志时调用 setParent(),导致窗口小部件被隐藏。您必须调用 show() 使小部件再次可见

但我不能使用 show(),因为我想隐藏它。

如何做到这一点?我应该使用 WinApi 还是有我错过的 QT 方式? (Qt::WindowStaysOnTopHint 标志是必需的)

UPD1:我实现了自己的系统托盘,我需要任务栏上的图标

UPD2:我尝试了 showMinimized()setWindowState(Qt::WindowMinimized)。在第一种情况下,任务栏上有图标,但在恢复窗口后(由 showFullScreen() 显示)有窗口控件:最小化、关闭。标题等。在第二种情况下,它会根据我的需要正确最小化和恢复,但任务栏上没有图标。

【问题讨论】:

  • 来自Managing Taskbar Buttons: "要防止窗口按钮被放置在任务栏上,请使用 WS_EX_TOOLWINDOW 扩展样式创建无主窗口。作为替代方案,您可以创建一个隐藏窗口并将此隐藏窗口设为可见窗口的所有者。” - 我不知道您为什么使用 Qt::Tool。除此之外,隐藏窗口和最小化窗口之间存在差异。前者不会获得任务栏按钮。
  • 我只是说我尝试了不同的标志组合
  • 你实现QSystemTrayIcon了吗?
  • 最小化应用而不是隐藏主窗口
  • 你试过QWindow::showMinimized()而不是setWindowFlags吗?

标签: c++ qt winapi


【解决方案1】:

好吧,我做了我想做的事。但我为此使用了 WinApi。希望这会对某人有所帮助。所以,毕竟

  • 为了最小化我使用以下东西:

    ShowWindow(hwnd, SW_SHOWMINIMIZED); 
    
  • 为了恢复到我使用的“prev”状态:

       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);
    

【讨论】:

  • 这没有回答您提出的问题(“我正在尝试在隐藏我的窗口后使我的应用程序的任务栏图标可见。”)。
  • 那么 id 有什么作用呢?我想让我的应用程序的任务栏图标在隐藏我的窗口后可见。在 Qt 的帮助下,我做不到。 WinApi 帮助了我。问题出在哪里?
  • 你没有隐藏你的窗口。你正在最小化它。我在 19 小时前的评论中指出了这一点。
  • 妈的,我太笨了!各种借口!!我真的想尽量减少它。问这个问题时,我似乎很累。再次抱歉,我会解决我的问题
【解决方案2】:

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

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

这样窗口又得到了自己的任务栏图标,我也可以通过 Alt+Tab 在两个窗口之间切换

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 2017-05-28
    • 2010-11-18
    • 2023-01-17
    • 2017-02-22
    • 2011-03-16
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多