一.前言
楼主最近开始接触摄像头这一块,发现Qt有封装好的库,于是就想记录相关的学习历程,方便自己查看,该文章只是简单实现了打开摄像头, 截图 关闭摄像头的功能
二.实现过程
1新建工程的时候需要moudle勾选multimediawidgets multimedia或者在pro文件中添加
QT += core gui multimediawidgets multimedia
2.简单布局界面
注意:左侧的控件是Vertical Layout
3. h文件内容
#ifndef CAMERADEMO_H
#define CAMERADEMO_H
#include <QWidget>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QDebug>
namespace Ui {
class CameraDemo;
}
class CameraDemo : public QWidget
{
Q_OBJECT
public:
explicit CameraDemo(QWidget *parent = 0);
~CameraDemo();
private slots:
void on_pushButton_start_clicked();
void on_pushButton_screen_clicked();
void on_pushButton_quit_clicked();
void onImageCaptured(int idx,QImage img);
private:
Ui::CameraDemo *ui;
QCamera *camera;
QCameraViewfinder *cameraViewFinder;
QCameraImageCapture *cameraImageCapture;
};
#endif // CAMERADEMO_H
4.cpp内容
#include "CameraDemo.h"
#include "ui_CameraDemo.h"
CameraDemo::CameraDemo(QWidget *parent) :
QWidget(parent),
ui(new Ui::CameraDemo)
{
ui->setupUi(this);
setWindowTitle("调用摄像头例程V1.0");
ui->pushButton_start->setText("打开摄像头");
ui->pushButton_screen->setText("截图");
ui->pushButton_quit->setText("关闭摄像头");
camera = new QCamera(this);
cameraViewFinder = new QCameraViewfinder(this);
cameraImageCapture = new QCameraImageCapture(camera);
ui->verticalLayout_camera->addWidget(cameraViewFinder);
camera->setViewfinder(cameraViewFinder);
connect(cameraImageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(onImageCaptured(int,QImage)));
}
CameraDemo::~CameraDemo()
{
delete ui;
}
void CameraDemo::on_pushButton_start_clicked()
{
camera->start();
}
void CameraDemo::on_pushButton_screen_clicked()
{
qDebug()<<"开始截图";
ui->label_screenShot->clear();
cameraImageCapture->capture();
}
void CameraDemo::onImageCaptured(int idx,QImage img)
{
qDebug()<<idx;
ui->label_screenShot->setPixmap(QPixmap::fromImage(img));
}
void CameraDemo::on_pushButton_quit_clicked()
{
camera->stop();
}
5.效果