Мне кажется, что это ошибка (я тестировал ее с PyQt5, и она работает правильно), проблема заключается в том, чтобы быть жизненным циклом QTextObject, поскольку, как и в C ++, жизненный цикл не определен, так как он является указателем, но являясь потомком QTextDocument, так что его жизненный цикл - это жизненный цикл QTextDocument, но в python кажется, что он считает его объектом с ограниченной областью действия (локальной переменной), не уважая права собственности, которыми обладает QTextDocument, поскольку он является его родителем , Обходное решение, кажется, делает obj членом класса:
def createObject(self, f):
self.obj = QtGui.QTextObject(self)
if f.isListFormat():
self.obj = QtGui.QTextList(self)
elif f.isTableFormat():
self.obj = QtGui.QTextTable(self)
elif f.isFrameFormat():
self.obj = QtGui.QTextFrame(self)
return self.obj
Или используя контейнер, который является членом класса.
class TextDocument(QtGui.QTextDocument):
def __init__(self, parent=None):
super(TextDocument, self).__init__(parent)
<b>self.objs = []</b>
def createObject(self, f):
obj = QtGui.QTextObject(self)
if f.isListFormat():
obj = QtGui.QTextList(self)
elif f.isTableFormat():
obj = QtGui.QTextTable(self)
elif f.isFrameFormat():
obj = QtGui.QTextFrame(self)
<b>self.objs.append(obj)</b>
return obj
Я предпочитаю второй обходной путь, так как в В первом случае вы можете создать проблемы, если создадите несколько объектов QTextObject, поскольку предыдущий будет удален.
Наконец, я рекомендую сообщить об ошибке.
Обработка жизни цикл некоторых объектов кажется постоянной ошибкой в PySide2.