Details
-
Bug
-
Resolution: Duplicate
-
Not Evaluated
-
None
-
6.7.0
-
None
-
Windows 11, x64
python 3.10.14
Description
When we install eventFilter for the QWidget, then method eventFilter gets event object, which is instance of base QEvent type (but it have to be some derived type, which depends on the event type).
from __future__ import annotations from typing import TYPE_CHECKING from PySide6.QtCore import QObject, QEvent from PySide6.QtWidgets import QApplication, QWidget if TYPE_CHECKING: from PySide6.QtGui import QDragEnterEvent class MainWindow(QWidget): def __init__(self): super().__init__() self._drop_processor = DropProcessor() self.setAcceptDrops(True) self.installEventFilter(self._drop_processor) # All works well, when we are using dragEnterEvent method instead of installEventFilter # def dragEnterEvent(self, event: QDragEnterEvent): # print(f'dragEnterEvent {event} type: {type(event)}') # print(f'mimeData: {event.mimeData()}') # event.acceptProposedAction() class DropProcessor(QObject): def eventFilter(self, watched: QObject, event: QEvent): if event.type() == QEvent.DragEnter: print(f'drag eventFilter:\n\tevent.type(): {event.type()}\n\tevent: {event}\n\ttype(event): {type(event)}') # We'll get the next error here if we try to get event.mimeData() # AttributeError: 'PySide6.QtCore.QEvent' object has no attribute 'mimeData' # event.mimeData() event.setAccepted(True) return True elif event.type() == QEvent.Drop: print(f'drop eventFilter:\n\tevent.type(): {event.type()}\n\tevent: {event}\n\ttype(event): {type(event)}') return True else: return super().eventFilter(watched, event) if __name__ == '__main__': app = QApplication() main_window = MainWindow() main_window.show() app.exec()
Expected output:
drag eventFilter:
event.type(): 60
event: <PySide6.QtGui.QDragEnterEvent(...
type(event): <class 'PySide6.QtGui.QDragEnterEvent'>
drop eventFilter:
event.type(): 63
event: <PySide6.QtGui.QDropEvent(...
type(event): <class 'PySide6.QtGui.QDropEvent'>
Actual output:
drag eventFilter:
event.type(): 60
event: <PySide6.QtCore.QEvent(QEvent::DragEnter)>
type(event): <class 'PySide6.QtCore.QEvent'>
drop eventFilter:
event.type(): 63
event: <PySide6.QtCore.QEvent(QEvent::Drop)>
type(event): <class 'PySide6.QtCore.QEvent'>
So, we cannot use methods like event.mimeData() and others.
The code works well in PySide6 6.6.0; 6.6.3.1
Attachments
Issue Links
- duplicates
-
PYSIDE-2675 Reg 6.6->6.7: Unable to get the QFileOpenEvent from a QEvent
-
- Closed
-