惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
爱范儿
爱范儿
小众软件
小众软件
MyScale Blog
MyScale Blog
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
V
V2EX
量子位
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
C
Check Point Blog
月光博客
月光博客

博客园 - 飘杨......

为ZLMediaKit在windows10编译srtp Windows10安装部署ZLMediaKit SurfaceView+EGL+OpenGL ES+ffmpeg播放视频并解决黑屏不显示画面的问题 SurfaceView+ANativeWindow+ffmpeg播放视频并解决花屏问题 SDL播放音频工具类封装 ffmpeg视频转码遇到H264黑屏问题 ffmpeg根据输入的参数截取视频 ffmpeg将视频流录制下来并保存到本地 ffmpeg解封装mp4并解码渲染(SDL2) Qt+ffmpeg+SDL硬件解码并渲染 ffmpeg+sdl播放H264/H265文件 FFmpeg实战:录制Windows屏幕并用FFmpeg压缩成H.264/H.265并保存 ffmpeg SwsContext像素格式转换BGRA转YUV420P H264/H265 NALU的nalu_unit_type解析 ffmpeg码率控制模式详解 ffmpeg-H264/H265常用编解码预设参数 Qt+FFmpeg+SDL 实现多路多格式原始视频播放工具:从像素处理到实时渲染 Qt+SDL 实战:多格式视频播放工具开发 —— 支持 RGBA/ARGB/RGB24/YUV420P 的完整实现 SDL将YUV视频渲染到Qt窗口播放
Qt QWidget中dropEvent(QDropEvent* e)拖拽放开不接收事件/不...
飘杨...... · 2025-06-17 · via 博客园 - 飘杨......

一、概述

  场景还原:

    在做视频多路视频监控项目的时候,需要用户拖动相机然后在拖拽放开后展示相机数据(视频画面)。现遇到一个问题,拖拽没问题,就是无法放下,切鼠标显示禁用符号。

即:dropEvent(QDropEvent* e)方法不执行。也不报错。

  ps:Qt版本用的是:5.12.0

二、解决办法

  在在定义的QWidget中重载了两个方法

 //拖拽进入
 void dragEnterEvent(QDragEnterEvent* e) override;

 //拖拽松开
 void dropEvent(QDropEvent* e) override;

  其中 void dragEnterEvent(QDragEnterEvent* e)方法执行了。 void dropEvent(QDropEvent* e)方法不执行。也就是能拖过来,但是无法松开(鼠标显示禁用符号)

  Qt版本用的是:5.12.0

  解决办法是:

    把配套的void dragMoveEvent(QDragMoveEvent* e)方法也重载一下。即要有拖进、拖拽移动、拖动放开这三个动作。

  完整示例代码如下:

YCameraWidget::YCameraWidget(QWidget* p) :QWidget(p)
{
    //接收拖拽
    this->setAcceptDrops(true);
}

//拖拽进入
void YCameraWidget::dragEnterEvent(QDragEnterEvent* e)
{
    //接收拖拽进入
    e->acceptProposedAction();
}

void YCameraWidget::dragMoveEvent(QDragMoveEvent* e)
{
    e->setDropAction(Qt::CopyAction);
    e->accept();
}

//拖拽松开
void YCameraWidget::dropEvent(QDropEvent* e)
{
    //拿到url
    qDebug() << e->source()->objectName();
    auto wid = (QListWidget*)e->source();
    qDebug() << wid->currentRow();
    auto cam = YCameraConfig::Create()->GetCamera(wid->currentRow());
    Open(cam.sub_url);

}