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

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain 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);

}