【问题标题】:Run a program in the background, put it in the system tray后台运行程序,放入系统托盘
【发布时间】:2016-08-15 11:12:32
【问题描述】:

我正在使用 Qt,我希望我的程序能够进入系统托盘,但也可以显示为窗口。

例如:我启动我的程序,它打开一个窗口,...,我关闭窗口但程序没有关闭,它仍然在后台。然后我可以通过系统托盘中创建的图标重新打开窗口。

我知道如何使用 QSystemTrayIcon 创建图标,并在右键单击图标时创建菜单,并通过菜单启动事件。但是我不知道该怎么做,当我关闭程序的窗口时,程序仍然在后台打开。

为了说明我的观点,它的功能与 Steam 相同。

【问题讨论】:

标签: c++ qt background-process system-tray


【解决方案1】:

您需要重新实现QWidget::closeEvent,隐藏窗口并忽略QCloseEvent

这在Qt System Tray Icon Example中有详细解释,这里是最有趣的部分:

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

【讨论】:

  • 问题是,当我从 MainWindow 类调用 hide 方法时,即使我使用 this 调用它,它也不会隐藏窗口;仅当我从无法真正获取事件的主函数中调用 hide 时它才有效
  • @Urefeu 你应该问一个包含minimal reproducible example的新问题
  • 我会的,我现在无法尝试解决方案。另外,当我调用hide()时,它并没有从任务栏中删除程序的图标,是吗?
  • @Urefeu 你也可以试试这个:stackoverflow.com/a/6094872/678093
  • @Urefeu 关于任务栏看看stackoverflow.com/a/4056292/678093
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
相关资源
最近更新 更多