【发布时间】:2011-02-25 20:48:14
【问题描述】:
destroyed() 信号可以为 QObject 捕获,但我想简单地测试 Python 对象是否仍然引用有效的 C++ Qt 对象。有没有直接这样做的方法?
【问题讨论】:
-
在 C++ Qt 中没有比捕捉
destroyed()信号更简单的可能性了,所以我怀疑这在 PyQt 中是否可行。
destroyed() 信号可以为 QObject 捕获,但我想简单地测试 Python 对象是否仍然引用有效的 C++ Qt 对象。有没有直接这样做的方法?
【问题讨论】:
destroyed() 信号更简单的可能性了,所以我怀疑这在 PyQt 中是否可行。
如果你导入 sip 模块,你可以调用它的 .isdeleted 函数。
import sip
from PyQt4.QtCore import QObject
q = QObject()
sip.isdeleted(q)
False
sip.delete(q)
q
<PyQt4.QtCore.QObject object at 0x017CCA98>
q.isdeleted(q)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: underlying C/C++ object has been deleted
【讨论】:
from PyQt5 import sip 完成。
您可以使用 Python 标准库中的 WeakRef 类。它看起来像:
import weakref
q = QObject()
w = weakref.ref(q)
if w() is not None: # Remember the parentheses!
print('The QObject is still alive.')
else:
print('Looks like the QObject died.')
【讨论】: