从系统托盘应用程序菜单打开 QDialog

Open QDialog from system tray application menu

我正在尝试从系统托盘菜单中的选项打开 QDialog (QtGui.QMenu)。但是我原来的 class 'Mensageiro' 是从 QtGui.QSystemTrayIcon 派生的,所以我在创建 QDialog 实例时得到一个异常:

TypeError: 'PySide.QtGui.QDialog' called with wrong argument types:
   PySide.QtGui.QDialog(Mensageiro)
Supported signatures:
   PySide.QtGui.QDialog(PySide.QtGui.QWidget = None, PySide.QtCore.Qt.WindowFlags = 0)

如何打开对话框?我不希望它没有父母。

解决方法其实很简单。即使是系统托盘应用程序也需要 QWidget 作为其父级。父小部件保持隐藏状态。所以我将 QDialog 创建为同一父窗口小部件的子窗口:

self.dialog = dialogos.DialogExemplo(self.parent)

当我使用 "exit" 选项关闭托盘应用程序时,将执行以下代码:

 self.application.setQuitOnLastWindowClosed(True)
 # Hide the tray icon before it is destroyed
 self.hide()
 # Close the parent widget, killing all open windows.
 self.parent.close()