【问题标题】:Qt - notifications without tray icon, possible?Qt - 没有托盘图标的通知,可能吗?
【发布时间】:2012-07-12 11:08:46
【问题描述】:

我正在编写一个 C++ Qt 桌面应用程序。

是否可以在 Qt 中显示 Skype=like 通知,无需创建托盘图标?

我发现的所有通知参考都需要一个托盘图标,我不想创建它。

通知应显示应用程序何时打开以及何时最小化。

【问题讨论】:

标签: c++ windows qt notifications


【解决方案1】:

更新:这似乎不适用于最新版本的 Qt。我发现的一种解决方法是在创建 QSystemTrayIcon 之后:

  • 致电show()
  • 使用showMessage 显示所需的消息
  • 致电hide()

这对我来说没问题。


创建一个QSystemTrayIcon,但永远不要调用show()。然后你可以使用QSystemTrayIcon::showMessage 来显示你的弹窗。

【讨论】:

  • 但是我将无法设置通知样式,它看起来像系统通知,不是吗?
  • 在 Mac 和 Windows(Qt 5.3,OS X 10.10 / Win 8.1)上试过这个:该消息仅在调用 show() 后显示,所以这似乎不是问题的有效答案。跨度>
  • 如果你从不打电话给show(),这是行不通的。但是你可以调用show(),然后是showMessage,然后是hide(),你会得到类似的效果。
【解决方案2】:

只需创建弹出类并将其显示在桌面上的某个位置,并始终位于顶部标志。通知也可能是一个小部件

【讨论】:

  • @sara:没有人愿意做你的工作,所以请给我们一些努力。例如,写一个sscce 并告诉我们你在写它时出了什么问题。 Official documentation 总是一个很好的起点。
  • 通知应该是和其他通知一样的通知,而不是随机窗口。
  • @LtWorf Skype 不使用系统通知,它是作为示例给出的。在完美的世界中 - 使用系统通知当然会很棒,但是平台之间存在如此多的差异,以至于有时无法实现您需要的行为。
【解决方案3】:

有点晚了,但你可能对这个库感兴趣 https://github.com/Snorenotify/Snorenotify/

Snorenotify 是一个多平台的 Qt 通知框架。使用插件系统可以在 Windows、Unix 和 Mac 上使用许多不同的通知系统创建通知。

【讨论】:

    【解决方案4】:

    遇到了与 OP 类似的问题(但使用 Python !!),Romario 的回答让我达到了我想要的一半。

    在我的场景中,我有一个系统托盘工具,我通过锁文件强制只有一个活着。但是用户反馈要求,如果他们在已经打开的情况下尝试启动,我会提供某种反馈。

    我发现的是在 Windows 上 - Romarios 的答案将导致图标保留在系统托盘中 - 如果您在 show() 之前调用 setVisible(False) 它将阻止图标出现/累积在系统托盘中:)

    我的完整样本是

    class SimpleNotifier(QtWidgets.QWidget):
    
        def notify_running(self):
            tray_icon = QtGui.QIcon(Params.TRAY_ICON)
            self.setIcon(tray_icon)
            self.setVisible(False)
            self.show()
            self.showMessage("Hi User", "Application already inside your sys-tray", QtGui.QIcon(Params.TRAY_ICON))
    
    def notify():
        app = QtWidgets.QApplication(sys.argv)
        notify = HUBController.SimpleNotifier()
        notify.notify_running()
        app.exit()
    
    notify()
        
    

    是的,在潜伏多年之后,我确实注册了一个帐户,只是为了发表这篇文章: :)

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-26
      • 1970-01-01
      相关资源
      最近更新 更多