是否可以查询PyQt4 QObject以确定基础C++;实例已被销毁? 这个信号可以被捕获为QObjor,但我想简单地测试Python对象是否仍然引用一个有效的C++ QT对象。是否有直接执行此操作的方法?
您可以使用Python标准库中的类。它看起来像:是否可以查询PyQt4 QObject以确定基础C++;实例已被销毁? 这个信号可以被捕获为QObjor,但我想简单地测试Python对象是否仍然引用一个有效的C++ QT对象。是否有直接执行此操作的方法?,python,qt,pyqt,pyqt4,Python,Qt,Pyqt,Pyqt4,您可以使用Python标准库中的类。它看起来像: 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.') 如果导入sip模块,则可以调用其.isdeleted函数 import s
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.')
如果导入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
导入sip
从PyQt4.QtCore导入QObject
q=QObject()
sip.isdeleted(q)
假的
sip.删除(q)
Q
q、 isdeleted(q)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行时错误:已删除基础C/C++对象
问题在于Qt对象,而不是Python对象。即使这仅仅是一个偶然的机会,但这不是解决问题的方法。拉什:他问:“我想简单地测试一下Python引用是否仍然有效。”。这就是它的作用。对不起,这句话不清楚。我问的是底层C++对象。我将解决这个问题。在C++ Qt中,没有比捕获<代码>销毁()/<代码>信号更容易的可能性,所以我怀疑这是可能的。如果没有SIP(SHIBONKEN),我发现从PyQt导入SIP在某些情况下会更好。按照PyQt5导入sip中的完成。