一、效果图
二、代码
#ifndef CAMERAIMGCAPTURE_H
#define CAMERAIMGCAPTURE_H
#include <QWidget>
#include <QDebug>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QLabel>
namespace Ui {
class CameraImgCapture;
}
class CameraImgCapture : public QWidget
{
Q_OBJECT
public:
explicit CameraImgCapture(QWidget *parent = nullptr);
~CameraImgCapture();
void init();
private slots:
void on_pushButton_2_clicked();
void on_imageCaptured(int id, QImage img);
void on_pushButton_clicked();
private:
Ui::CameraImgCapture *ui;
QCamera *camera;
QCameraViewfinder *view;
QCameraImageCapture *imgCapture;
QVector<QLabel*> m_Labels;
};
#endif // CAMERAIMGCAPTURE_H
#include "cameraimgcapture.h"
#include "ui_cameraimgcapture.h"
CameraImgCapture::CameraImgCapture(QWidget *parent) :
QWidget(parent),
ui(new Ui::CameraImgCapture)
{
ui->setupUi(this);
}
CameraImgCapture::~CameraImgCapture()
{
delete ui;
}
void CameraImgCapture::init()
{
m_Labels<<ui->label_1<<ui->label_2<<ui->label_3<<ui->label_4<<ui->label_5<<ui->label_6;
camera = new QCamera;
view = new QCameraViewfinder;
imgCapture = new QCameraImageCapture(camera);
connect(imgCapture,&QCameraImageCapture::imageCaptured,this,&CameraImgCapture::on_imageCaptured);
ui->verticalLayout_2->addWidget(view);
imgCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
camera->setCaptureMode(QCamera::CaptureStillImage);
camera->setViewfinder(view);
camera->start();
}
void CameraImgCapture::on_pushButton_2_clicked()
{
imgCapture->capture();
}
void CameraImgCapture::on_imageCaptured(int id,QImage img)
{
static int index = -1;
index ++;
if(index >=6){
index = -1;
return;
}
qDebug()<<"index"<<index;
m_Labels.at(index)->setPixmap(QPixmap::fromImage(img).scaled(m_Labels.at(index)->size()));
}
void CameraImgCapture::on_pushButton_clicked()
{
init();
}
三、总结
1.QCamera对系统摄像头进行封装
2.QCameraViewfinder提供一个展示窗口
3.QCameraImageCapture对记录的媒体资源进行捕捉