QT5打开摄像头

一、所需外部模块

需要包含多媒体模块

QT+=multimedia multimediawidgets

multimedia:QCamera

multimediawidgets:QVideoWidget,QCameraViewfinder

二、类

QCamera类:

QCamera类为系统摄像头设备提供接口。
QCamera可以与QCameraViewfinder一起使用,用于取景器显示,QMediaRecorder用于视频录制,QCameraImageCapture用于图像拍摄。

QVideoWidget类:

QVideoWidget类提供了一个小部件,用于呈现由媒体对象生成的视频。

QCameraViewfinder类:

QCameraViewfinder类提供了一个相机取景器小部件。

三、使用

1、遍历可用设备
foreach (const QCameraInfo &cameraInfo, QCameraInfo::availableCameras()) {

       //人能读懂的设备名字
       qDebug()<< cameraInfo.description();	
       //返回相机的设备名称
       //比如:@device:pnp:\\\\?\\usb#vid_13d3&pid_56db&mi_00#8&31a7812a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global
       qDebug()<< cameraInfo.deviceName();
    

}
2、开启摄像头
①使用QVideoWidget作为显示窗口
QCamera *camera;    //摄像头对象
camera = new QCamera(QCameraInfo::defaultCamera());	//设置为默认设备
camera->setViewfinder(ui->widget);	//指定图像的输出窗口
camera->start();	//启动

在上面的ui->widget是在ui界面中拖入的一个widget控件,然后提升控件为QVideoWidget类型,当然也可以直接使用QVideoWidget定义对象来作为显示的窗口

②使用QCameraViewfinder作为显示窗口
QCamera *camera;    //摄像头对象
camera = new QCamera(QCameraInfo::defaultCamera());	//设置为默认设备
QCameraViewfinder *viewFinder;
viewFinder=new QCameraViewfinder;
viewFinder->show();
camera->setViewfinder(viewFinder);
camera->start();

这个并没有提升控件,所以QCameraViewfinder会作为一个单独的窗口显示出来

③问题

在显示的时候,会出现以下情况

问题区域的问题是在显示的时候会显示图像的上半部分,但是只会显示一次,然后就不再更新,或者说显示的区域是0~10,正常显示的部分是2~10,0~2这部分就只显示一次,然后就不在更新,除非显示窗口发生重绘事件。

我的解决方案是写一个计时器,然后响应计时器的消息,在槽函数中调用显示窗口的update成员,产生绘制事件来更新窗口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值