ok, at first glance i fixed the crash, now app destroys objects correctly
class ListWidgetCompleter(QObject):
def __init__(self, popup: QWidget, widget: QWidget):
QObject.__init__(self, None)
assert popup != None
assert widget != None
self.destroyed.connect(ListWidgetCompleterDestroed)
# assert isinstance(parent, QLineEdit)
self.__maxVisibaleItems = 0
self.__attachPoupToWidget(popup, widget)
def __del__(self):
print("<<>> ListWidgetCompleter py layer deleted")
def __attachPoupToWidget(self, popup: QWidget, widget: QWidget):
self.__popup = popup
self.__widget = widget
self.__popup.setParent(None)
self.__popup.setWindowFlag(Qt.Popup)
self.__popup.installEventFilter(self)
self.__widget.installEventFilter(self)
self.__popup.setFocusProxy(self.__widget)
self.__popup.setFocusPolicy(self.__widget.focusPolicy())
def setMaxVisibleItems(self, maxItems: int):
self.__maxVisibaleItems = maxItems
def popup(self):
return self.__popup
def widget(self):
return self.__widget
def showPopup(self, rect):
pos = self.__widget.mapToGlobal(QPoint(0, 0))
print("X " + str(pos.x()) + " Y " + str(pos.y()) + " le.w " + str(self.__widget.width()))
self.__popup.setGeometry(pos.x(), pos.y() + self.__widget.height(), self.__widget.width(), 80)
if not self.__popup.isVisible():
self.__popup.show()
self.__popup.setFocus()
def eventFilter(self, o: QObject, e: QEvent):
if self.__widget == o:
pass
else:
if e.type() == QEvent.KeyPress:
print("keypress")
self.__widget.setFocus()
self.__widget.event(e)
return False
return QObject.eventFilter(self, o, e)
<<>> DicView py layer deleted
<<>> ListWidgetCompleter py layer deleted
<<>> ListWidgetCompleter C++ obj removed<PyQt5.QtCore.QObject object at 0x000002345A1C88B0>
<<>> SuggestionPopup py layer deleted
<<>> SuggestionPopup C++ obj removed<PyQt5.QtWidgets.QWidget object at 0x000002345A1C88B0>
<<>> DicView C++ obj removed<PyQt5.QtWidgets.QWidget object at 0x000002345A194EE0>