QSystemTrayIcon in 4.8 - 如何删除这个东西?

Posted

技术标签:

【中文标题】QSystemTrayIcon in 4.8 - 如何删除这个东西?【英文标题】:QSystemTrayIcon in 4.8 - how to delete this thing? 【发布时间】:2014-05-09 01:00:42 【问题描述】:

正如标题所说,这是什么东西,我该如何处理?

这是一个QObject,并要求QObject 作为它的父级。但同时它的子对象显然是QWidgets

通常使用QObjects,您可以在删除父级时让父级删除它,也可以自己删除它。但是QSystemTrayIcon 似乎并没有以这种方式工作-我尝试将其设为任意 QObject 的子级,然后让它的父级删除它-当我这样做时,一个挥之不去的事件被发送到已成为父级的 QSystemTrayIcon-删除。在 OSX 上,这会出现段错误,因为它最终会向无效对象发送 obj 消息。

这可能是因为 QMainWindow 在我的应用程序中同时消失了。

如果我必须在取消子节点后显式删除它,为什么?如果是这样的话,听起来这取决于时间或其他东西。

如果QSystemTrayIcon 真的只是想要一个QWidget 作为它的父级,为什么它的构造函数不是这样写的呢?

【问题讨论】:

您是否尝试使用deleteLater() 而不是delete?这应该有助于确保在删除 QSystemTrayIcon 之前传递所有适当的事件。 【参考方案1】:

以下方法有效:

QApplication 子类 如果需要,将 QSystemTrayIcon 实例设为应用实例的子实例 创建首先删除托盘的自定义应用析构函数

Tray 内部使用 QWidget,当 QApplication 实例已经销毁时,它的删除工作不正确。

【讨论】:

【参考方案2】:

就是这样

trayIcon->setVisible(false);
exit(0);

【讨论】:

虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。

以上是关于QSystemTrayIcon in 4.8 - 如何删除这个东西?的主要内容,如果未能解决你的问题,请参考以下文章

In .net 4.8,calculate the time cost of serialization in BinaryFormatter,NewtonSoft.json,and System.T

QSystemTrayIcon 未显示

QSystemtrayicon:Mac 上没有图像

如何捕捉 QSystemTrayIcon 的 MouseHover 事件?

有啥方法可以通过 Qt Designer 添加 QSystemTrayIcon

QSystemTrayIcon 处理左右分别点击?