我正在编写一个C++ Qt桌面应用程序。
是否可能在Qt中显示类似于Skype的通知,而不需要创建托盘图标?
我找到的所有通知参考都需要一个托盘图标,但我不想创建它。
当应用程序打开和最小化时,通知应该显示。
是否可能在Qt中显示类似于Skype的通知,而不需要创建托盘图标?
我找到的所有通知参考都需要一个托盘图标,但我不想创建它。
当应用程序打开和最小化时,通知应该显示。
show()
showMessage
显示所需的消息hide()
这对我来说可以正常工作。
创建一个QSystemTrayIcon
,但从不调用show()
。然后,您可以使用QSystemTrayIcon::showMessage
来显示您的弹出窗口。
show()
,这将不起作用。但是你可以先调用show()
,然后调用showMessage
,最后再调用hide()
,这样就会产生类似的效果。 - Romário有点晚了,但您可能会对这个库感兴趣:https://github.com/Snorenotify/Snorenotify/
Snorenotify是一个多平台的Qt通知框架。使用插件系统,可以在Windows、Unix和Mac上创建许多不同的通知系统。
我遇到了与 OP(但是使用 Python!!)类似的问题,Romario 的答案让我达成了一半的目标。
在我的场景中,我有一个系统托盘工具,通过锁文件来确保只有一个正在运行。但是用户反馈要求,如果他们尝试启动已经打开的工具,我需要提供某种形式的反馈。
我发现,在 Windows 上,如果在 show()
之前调用 setVisible(False)
,就可以防止图标在系统托盘中出现/累积,这与 Romarios 的答案相符 :)
我的完整示例:
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()