Qwidget上显示海康监控视频,如何在视频上层绘图并且不闪烁

徐大大平凡之路 2020-10-16 07:24:47
请问下关于Qt的问题。
期望实现的效果:Qwidget上显示海康监控视频,然后可以在视频上绘制动态矩形框。
现在的做法是:
1、把Qwidget的handle 传给海康监控相机sdk,把视频流显示到Qwidget上。 HWND handle = HWND(this->winId());
2、重写paintEvent(QPaintEvent* event)函数,绘制矩形。
现在遇到的问题是:视频一直在闪烁。
有什么办法,可以在视频上绘制矩形框,并且不闪烁。
参考链接:
https://www.jianshu.com/p/04dd5b892a48
https://blog.csdn.net/u011430225/article/details/75952697
...全文
7026 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
doan chan 2023-09-11
  • 打赏
  • 举报
回复

void CALLBACK fDrawFun(LONG realhandle, HDC hdc, DWORD dwuse)
{
// TODO 画框
}
sdk:
NET_DVR_RigisterDrawFun(lRealPlayHandle, fDrawFun,NULL)

攀是一种状态 2021-12-09
  • 打赏
  • 举报
回复

请问找到合适的解决方法了吗,楼主

xqhrs232 2020-10-18
  • 打赏
  • 举报
回复
学习大神的技术
  • 打赏
  • 举报
回复
我试过了。 但是 叠加在 视频上面的 widget,无论如何都没法设置为透明的效果。 所以,视频上就是有一个 被遮盖的效果。
攀是一种状态 2021-12-09
  • 举报
回复
@徐大大平凡之路 大佬有合适的解决方法了吗,我也遇到这个问题了
  • 打赏
  • 举报
回复
引用 4 楼 戏言zare 的回复:
我给你看看我的例子吧 InitLogin(); LoginDevice(CameraIP,CameraUser,CameraPWD); void MainForm::InitLogin() { NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); } void MainForm::LoginDevice(QString ip, QString user, QString pwd) { NET_DVR_USER_LOGIN_INFO struLoginInfo = {0}; struLoginInfo.bUseAsynLogin = 0; //同步登录方式 strcpy(struLoginInfo.sDeviceAddress, ip.toLatin1().data()); //设备IP地址 struLoginInfo.wPort = 8000; //设备服务端口 strcpy(struLoginInfo.sUserName, user.toLatin1().data()); //设备登录用户名 strcpy(struLoginInfo.sPassword, pwd.toLatin1().data()); //设备登录密码 //设备信息, 输出参数 NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0}; LONG lUserID; lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40); if (lUserID < 0) { NET_DVR_Cleanup(); return; } NET_DVR_PREVIEWINFO struPlayInfo = {0}; struPlayInfo.hPlayWnd = (HWND)ui->widview->winId(); //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 struPlayInfo.lChannel = 1; //预览通道号 struPlayInfo.dwStreamType = 0; //0-主码流,1-子码流,2-码流3,3-码流4,以此类推 struPlayInfo.dwLinkMode = 0; //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP struPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流 viewnow = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL); }
你的这段代码是 如何获取海康监控视频,并把视频显示到 ui->widview 我现在 还想在ui->widview上绘制矩形框。
  • 打赏
  • 举报
回复
你的这段代码是 如何获取海康监控视频,并把视频显示到 ui->widview
zare戏言 2020-10-17
  • 打赏
  • 举报
回复
我给你看看我的例子吧 InitLogin(); LoginDevice(CameraIP,CameraUser,CameraPWD); void MainForm::InitLogin() { NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); } void MainForm::LoginDevice(QString ip, QString user, QString pwd) { NET_DVR_USER_LOGIN_INFO struLoginInfo = {0}; struLoginInfo.bUseAsynLogin = 0; //同步登录方式 strcpy(struLoginInfo.sDeviceAddress, ip.toLatin1().data()); //设备IP地址 struLoginInfo.wPort = 8000; //设备服务端口 strcpy(struLoginInfo.sUserName, user.toLatin1().data()); //设备登录用户名 strcpy(struLoginInfo.sPassword, pwd.toLatin1().data()); //设备登录密码 //设备信息, 输出参数 NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0}; LONG lUserID; lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40); if (lUserID < 0) { NET_DVR_Cleanup(); return; } NET_DVR_PREVIEWINFO struPlayInfo = {0}; struPlayInfo.hPlayWnd = (HWND)ui->widview->winId(); //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 struPlayInfo.lChannel = 1; //预览通道号 struPlayInfo.dwStreamType = 0; //0-主码流,1-子码流,2-码流3,3-码流4,以此类推 struPlayInfo.dwLinkMode = 0; //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP struPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流 viewnow = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL); }
mideum 2020-10-17
  • 打赏
  • 举报
回复
非window(有parent)的QWidget天生就是透明背景的啊,根本不需要设置,不清楚你是怎么搞的
mideum 2020-10-16
  • 打赏
  • 举报
回复
你既然把这个widget的HWND传给sdk了,就不要再在它的paintEvent里面画东西啦
搞一个widget专门传给sdk的,再另外搞一个widget专门用来画矩形的,叠在前面一个上面
攀是一种状态 2022-01-17
  • 举报
回复
@mideum 两个widget只会显示一个,海康摄像头回覆盖掉矩形框,老哥,怎么解决啊
源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

21,503

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧