2016-08-15 99 views
3

我使用的是Qt,我希望我的程序能夠進入系統托盤,但也可以顯示爲窗口。在後臺運行程序,將其放入系統托盤中

例如:我啓動我的程序,它打開一個窗口,...,我關閉了窗口,但程序沒有關閉,它仍然在後臺。然後,我可以通過系統托盤中創建的圖標重新打開窗口。

我知道如何使用QSystemTrayIcon創建圖標,並在右鍵單擊圖標時創建菜單,並通過菜單啓動事件。然而我不知道該怎麼做,所以當我關閉程序的窗口時,程序仍然在後臺打開。

爲了說明我的觀點,它將與Steam相同。

+0

的可能的複製[如何正確地實現了「最小化到托盤」功能的Qt?](HTTP:/ /stackoverflow.com/questions/3332257/how-do-i-properly-implement-a-minimize-to-tray-function-in-qt) –

+0

@Torbjörn它不是一個完全重複的「最小化」和「關閉」需要以稍微不同的方式處理 –

+0

@ms我懂了。然後,對於噪音抱歉。 –

回答

1

你需要重新實現QWidget::closeEvent,隱藏窗口和忽略QCloseEvent

對此進行了詳細的Qt System Tray Icon Example解釋,這裏是最有趣的部分:

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

問題是,當我從我的MainWindow類調用hide方法時,即使我使用'this'調用它,它也不會隱藏窗口;它只適用於如果我從主函數調用隱藏我無法真正得到事件 – Urefeu

+0

@Urefeu你應該問一個包含[mcve] –

+0

的新問題我會,我現在無法嘗試解決方案。另外,當我調用hide()時,它不會從任務欄中刪除程序的圖標,是嗎? – Urefeu