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

推荐订阅源

博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
博客园 - Franky
IT之家
IT之家
V
Visual Studio Blog
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
博客园 - 叶小钗
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
罗磊的独立博客
小众软件
小众软件
Jina AI
Jina AI

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

为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);

}