У меня есть приложение 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.