PySide6中QVideoWidget无法接收dropEvent的异常问题咨询
问题原因
该现象不属于Qt框架bug,是QVideoWidget的特殊实现逻辑导致:
QVideoWidget默认会在内部创建一个原生渲染子控件用于输出视频画面,该子控件会完全覆盖QVideoWidget的客户区,且默认未开启拖拽事件接收。你在父类QVideoWidget上设置的setAcceptDrops(True)仅对父控件本身生效,拖拽事件触发时会优先被内部子控件消费,无法传递到你重写的父控件事件回调中。仅窗口标题栏区域未被内部子控件覆盖,因此仅该区域可以触发drop事件。
解决方案
在初始化时遍历QVideoWidget的所有子控件,同步开启它们的拖拽接收权限即可,修改后的可运行代码如下:
import sys from PySide6.QtCore import QSize from PySide6.QtMultimediaWidgets import QVideoWidget from PySide6.QtWidgets import QApplication, QWidget class MyWidget(QVideoWidget): def __init__(self,*args): super().__init__(*args) self.setAcceptDrops(True) self.setMinimumSize(QSize(600,400)) # 给内部所有子控件开启拖拽接收权限 for child in self.findChildren(QWidget): child.setAcceptDrops(True) def dragEnterEvent(self, event): print(event) event.accept() def dragMoveEvent(self, event): print(event) event.accept() def dropEvent(self, event): print(event) # 此处可直接加入你已实现的播放逻辑 if __name__ == "__main__": app = QApplication([]) widget = MyWidget() widget.show() sys.exit(app.exec())
内容的提问来源于stack exchange,提问作者fristhon
相关产品推荐
相关产品推荐

