我有一个在 Nuke 中运行的 PySide QMainWindow。应用程序使用的一些小部件使用.ui
在 Qt Designer 中创建的文件。
直到最近,QMainWindow 类还没有被赋予父级。因此,当 Nuke 被最小化或改变焦点时,QMainWindow 并没有最小化或获得焦点。
为了解决这个问题,在创建 QMainWindow 时,我使用该QApplication.activeWindow()
方法获取一个对象以将 QMainWindow 作为父级提供。
parent = QApplication.activeWindow()
window = MyMainWindow(parent)
如果我这样做,QMainWindow 将最小化并使用 Nuke 更改焦点。但是,当访问使用文件创建的任何小部件的子小部件时.ui
,它会引发异常
Traceback (most recent call last):
...
RuntimeError: Internal C++ object (PySide.QtGui.QPushButton) already deleted.
我正在使用与此非常相似的方法将文件加载.ui
到我的 QWidget 类中
为什么要删除 C++ 对象(垃圾收集)?当我为 QMainWindow 指定父级时,为什么行为会发生变化?是否有另一种方法可以将 QMainWindow 设置为 Nuke 的父对象,以便正确最小化和聚焦,或者以不同的方式加载.ui
文件而不会遇到此垃圾收集问题?