海康威视SDK实例QtDemo显示NVR视频窗口(Linux+Qt)
陈拓 2021/07/312021/08/01
1. 概述
在《海康威视客户端iVMS-4200连接NVR》
https://zhuanlan.zhihu.com/p/395137370
https://blog.youkuaiyun.com/chentuo2000/article/details/119298486
一文中我们通过海康威视客户端iVMS-4200连接NVR。
本文我们通过海康SDK连接NVR。
2. 下载SDK
海康威视:https://www.hikvision.com/cn/
- 下载地址
https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10

- 文档下载


- 程序包下载
CH-HCNetSDKV6.1.6.45_build20210302_linux64_20210428163105.zip
- 解压

3. 安装QT
见《在Win10的Linux子系统Ubuntu中使用Qt》
https://zhuanlan.zhihu.com/p/393630007
https://blog.youkuaiyun.com/chentuo2000/article/details/119146380
4. 编译海康官方实例
4.1 复制实例文件
- 复制QtDemo
将前面下载的海康SDK中的文件夹QtDemo复制到我们在《在Win10的Linux子系统Ubuntu中使用Qt》一文中创建的目录hk中。
在WSL中的目录hk
![]()
对应Win10的目录:
C:\Users\admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\ccdc\hk

- 修改权限
chmod -R 755 QtDemo

- 复制库文件
进入QtDemo

查看qt_demo_readme.txt
![]()
将SDK/lib下所有so文件拷贝到QtDemo/Linux64/lib
修改权限
chmod -R 755 Linux64/lib

4.2 编译
- 进入目录Linux64

- 运行Qt Creator
qtcreator
![]()

- 打开项目
File > Open File or Project…

选择项目,Open

- 编译
Build > Build All

有错误。
- 改错
实例代码是用Qt4.7编写的,我用Qt5,要修改代码,要修改的地方很多。
1) 修改编码
所以出现下面提示的地方都要改:
![]()
选择编码:

使用GBK编码,否则中文乱码。
2) QtGui/QDialog找不到

Qt版本的问题去掉QtGui/。还有很多同样的错误,所有出现这个错误的地方都要改。
3) error: 'UnicodeUTF8' is not a member of 'QApplication'
原因是:QCoreApplication::UnicodeUTF8已被弃用。解决方法:
修改
setText(QApplication::translate("MainWindow", "&Quitar", 0, QApplication::UnicodeUTF8));
为
setText(QApplication::translate("MainWindow", "&Quitar", 0);
4) error: ‘class QHeaderView’ has no member named ‘setResizeMode’
解决方法:
将 setResizeMode 替换为为 setSectionResizeMode
即将:
table->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
替换为
table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
5) error: ‘setCodecForTr’ is not a member of ‘QTextCodec’
Qt5以前涉及到中文要用下面三行:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
Qt5删除了QTextCodec的成员函数setCodecForTr和setCodecForCStrings:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
解决方法,注释掉上面两行。
修改,编译,再修改,再编译,直到没有错误。
- 再编译

没有错误,警告不管它。

编译完成
4.3 运行
- 按F5或者点击左下角的Run按钮运行程序

- 右击device tree登录

登录设置:

OK

选择通道:

双击选择的通道:
- 实时监控Preview

- 回放Playback


本文介绍如何使用海康威视SDK和Qt在Linux环境下搭建并编译QtDemo实例,实现NVR视频窗口的显示。从SDK下载到环境配置、代码修改直至编译运行进行了详细说明。
882

被折叠的 条评论
为什么被折叠?



