【发布时间】: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吗?