2016-08-15 4 views
3

私はQtを使用しています。自分のプログラムをシステムトレイに入れたいだけでなく、ウィンドウとして表示することもできます。バックグラウンドでプログラムを実行してシステムトレイに入れます

例:プログラムを起動してウィンドウを開きます。ウィンドウを閉じますが、プログラムは終了せず、バックグラウンドのままです。その後、システムトレイに作成されたアイコンを使ってウィンドウを開くことができます。

私はQSystemTrayIconを使用してアイコンを作成し、アイコンを右クリックしてメニューを作成し、メニューからイベントを起動する方法を知っています。しかし、私はプログラムのウィンドウを閉じると、プログラムはバックグラウンドで開いたままになるようにする方法を知らない。

私の要点を説明するために、Steamと同じ機能があります。

+0

可能な重複[Iが適切にQtの中で機能「をトレイに最小化」を実装するにはどうすればよい?](HTTP:/

この

は、ここで最も興味深い部分である、Qt System Tray Icon Exampleに詳細に説明されています/tackoverflow.com/questions/3332257/how-do-i-properly-implement-a-minimize-to-tray-function-in-qt) –

+0

@Torbjörn「最小化」と「閉じる」必要性と正確に重複していません若干異なる扱いになる –

+0

@msそうですか。それでは、騒音をおかけして申し訳ありません。 –

答えて

1

QWidget::closeEventを再実装する必要があります。ウィンドウを非表示にしてを無視すると、QCloseEventは無視されます。

void Window::closeEvent(QCloseEvent *event) 
{ 
    if (trayIcon->isVisible()) { 
     hide(); 
     event->ignore(); 
    } 
} 
+0

問題は、MainWindowクラスからhideメソッドを呼び出すと、 'this'を使用して呼び出してもウィンドウが隠されないことです。それは私が実際にイベントを得ることができない主な機能からhideを呼び出す場合にのみ機能します – Urefeu

+0

@Urefeuあなたは[mcve]を含む新しい質問をするべきです –

+0

私は、今解決することはできません。また、私が 'hide()'を呼び出すと、プログラムのアイコンをタスクバーから削除しませんか? – Urefeu

関連する問題