2016-08-15 93 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