2011-01-26 4 views
2

Skype처럼 대개 트레이에 최소화되는 Qt 앱이 있습니다. 사용자가 트레이 아이콘을 클릭하면 응용 프로그램 창이 표시됩니다.트레이에 최소화 된 Qt 앱, 포커스 도용 방지에 문제가 있습니다.

이것은 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

나는 activateWindow를 호출해야했다. 내 코드를 다음으로 변경했습니다.

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

답변

1

트레이에서 클릭하면 다음 코드를 사용하여 응용 프로그램을 볼 수 있습니다.

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

이렇게하면 케이스가 최소화되어 트레이 아이콘을 클릭합니다.

+0

setWindowState가 setVisible/show/hide와 동일한 방식으로 작동합니까? 나는 볼 수있는 깃발을 할 수 없었다. – sashoalm

+0

'WindowActive'는 그것을 보여 주어야합니다. – ismail

관련 문제