我有一个Qt应用程序,像Skype一样,通常最小化到托盘。当用户单击托盘图标时,将显示应用程序窗口。
这适用于Linux和WinXP。但是在Win7上,应用程序窗口会显示但仍然低于其他窗口 - 除非当前活动的窗口是Qt Creator,或者是我的应用程序(在我将其最小化到托盘之前)。所以它必须与防止焦点窃取有关。
我知道Skype是用Qt编写的,他们没有这个问题,所以它必须是可修复的。
这是我的代码:
void MainWindow::toggleVisible(QSystemTrayIcon::ActivationReason reason) { if (QSystemTrayIcon::Trigger == reason) setVisible(!isVisible()); }
[编辑] 事实证明我必须调用activateWindow。我将代码更改为:
void MainWindow::toggleVisible(QSystemTrayIcon::ActivationReason reason) { if (QSystemTrayIcon::Trigger == reason) { if (isVisible()) { hide(); } else { show(); raise(); activateWindow(); } } }
现在适用于Win7。
答案 0 :(得分:1)
我使用以下代码使我的应用程序在从托盘中单击时可见;
setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
这将处理最小化的情况并单击托盘图标。