Qt应用程序,最小化到托盘,在Win7上有防止焦点窃取的问题

时间:2011-01-26 08:41:09

标签: qt windows-7

我有一个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。

1 个答案:

答案 0 :(得分:1)

我使用以下代码使我的应用程序在从托盘中单击时可见;

setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);

这将处理最小化的情况并单击托盘图标。