You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:04