liudianwu |
2022-12-01 15:52 |
Qt视频监控系统一个诡异问题的解决思路(做梦都想不到)
## 一、前言 由于Qt版本众多,几百个版本之间存在不兼容的情况,为此如果要兼容很多版本,没有取巧的办法和特殊的捷径,必须自己亲自安装各个版本编译运行并测试,大问题一般不会有,除非缺少模块,小问题还是不断有的,很多时候可能是上一个版本还是正常的,下一个版本同样的地方就出现了BUG,一般这类情况就两个答案,要么自己的代码健壮性不够兼容性不好,需要慢慢调试找到兼容之法,要么这是Qt官方新增的BUG,这个可以自己去Qt官方BUG网站查询有没有人也遇到过,一般老外在上面比较活跃,新版本发布后新增的BUG,不出半年基本上都会有提问,这个就不得不说Qt现在的开发质量,比Qt4时代诺基亚时代不是一个量级的,差的不是一星半点,彪版本的速度(QtCreator版本一年多时间从5.0飙到了9.0)和新增BUG的速度一样快。
目前Qt6.4发布了,6.5版本也处于即将正式版本阶段,为了尝鲜,也为了验证之前的项目代码兼容性问题,毫无疑问果断的下载安装编译,开开心心的点运行,哇咔咔,所有视频控件全部黑色的,这他么的翻车了,奇怪的是用6.3以及之前的版本全部正常的,非常诡异的问题,只能拼命的不断的查找原因,做了如下各种尝试:
1. 采用回调qpainter绘制图片,正常; 2. 打印qopenglwidget所有解析过程,正常; 3. 强制指定qopenglwidget红色背景,依然黑色,看来不是数据问题; 4. 单独弹出视频,显示正常; 5. 怀疑是嵌入到qmainwindow的问题,改成qwidget,问题一样; 6. 怀疑是共享opengl上下文导致的,注释掉 QApplication::setAttribute(Qt::AA_ShareOpenGLContexts); 问题依旧; 7. 整个视频监控面板64通道所在窗体作为独立的显示,正常; 8. 怀疑编译器问题,换用msvc编译,正常; 9. 奇了怪了msvc怎么可以mingw不行?应该不是Qt库的问题,要出问题一般都会出问题; 10. 离成功应该不远了,仔细思考自己的项目在mingw和msvc中有何不同,原来mingw版本用的miniblink内核显示网页,而msvc用的是webengine浏览器控件,仔细对比,怀疑是miniblink冲突导致; 11. 注释掉miniblink,正常,果真是他,可为何之前的版本正常呢?这个就暂时不去追究了,因为可能有些机制变了; 12. 总不能不用他显示网页,毕竟很多用户默认就是mingw,没办法必须兼容,上万能大法,延时加载,程序运行后延时或者异步加载miniblink的库,之前是构造函数直接加载的,测试正常,打完收工; 13. 正常以后又在Qt4.7到Qt6.5之间几十个版本测试无误,收工; 14. 自此终于找到问题所在,不解决肯定晚上睡不着的,程序员解决好问题以后心情一般是非常美妙的,必须去楼下的兰州拉面或者沙县小吃加鸡腿,顺带加两个卤蛋。
## 二、效果图 [attachment=23187][attachment=23188][attachment=23189]
## 三、体验地址 1. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_system。 2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun) 3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun) 4. 个人主页:[https://blog.csdn.net/feiyangqingyun](https://blog.csdn.net/feiyangqingyun) 5. 知乎主页:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/) 6. 在线文档:[https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/](https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/)
|
|