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

时间:2014-05-09 01:00:42

标签: c++ qt qwidget qmainwindow qobject

正如标题所说,这件事是什么,我该如何处理呢?

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

通常使用QObject s,您可以让父母在删除父项时将其删除,也可以自行删除。但QSystemTrayIcon似乎没有这种方式 - 我尝试将它作为任意QObject的子项,然后让它的父级删除它 - 当我这样做时,一个延迟的事件被发送到QSystemTrayIcon家长删除。在OSX上这是段错误,因为它最终向无效对象发送obj消息。

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

如果我必须在取消它之后明确删除它,为什么?如果是这种情况,听起来这是时间依赖性的。

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

2 个答案:

答案 0 :(得分:0)

以下方法有效:

  • 子类QApplication
  • 如果需要,可以使QSystemTrayIcon实例成为app实例的子实例
  • 创建首先删除托盘的自定义应用程序析构函数

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

答案 1 :(得分:0)

就这些

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