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
。
通常使用QObject
s,您可以在删除父级时让父级删除它,也可以自己删除它。但是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 的 MouseHover 事件?