Приложение Qt, свернутое в трей, на Win7 есть проблема с предотвращением кражи фокуса - PullRequest
2 голосов
/ 26 января 2011

У меня есть приложение Qt, которое, как и Skype, обычно сворачивается в трей. Когда пользователь нажимает на иконку в трее, отображается окно приложения.

Это прекрасно работает на Linux и WinXP. Однако в Win7 окно приложения отображается, но остается под другими окнами - если текущее активное окно не Qt Creator или мое приложение (до того, как я свернул его в трей). Так что это должно быть как-то связано с предотвращением кражи фокуса.

Я знаю, что Skype написан на Qt, и у них нет этой проблемы, поэтому он должен быть исправлен.

Вот мой код:

void MainWindow::toggleVisible(QSystemTrayIcon::ActivationReason reason)
{
    if (QSystemTrayIcon::Trigger == reason)
        setVisible(!isVisible());
}

[Изменить] Оказывается, мне пришлось вызвать activWindow. Я изменил свой код на:

void MainWindow::toggleVisible(QSystemTrayIcon::ActivationReason reason)
{
    if (QSystemTrayIcon::Trigger == reason)
    {
        if (isVisible())
        {
            hide();
        }
        else
        {
            show();
            raise();
            activateWindow();
        }
    }
}

Теперь работает на Win7.

1 Ответ

1 голос
/ 26 января 2011

Я использую следующий код, чтобы сделать мое приложение видимым при нажатии из трея;

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

это обработает случай, когда оно свернуто, и вы щелкаете значок в трее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...