2011-01-26 15 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

関連する問題