在工程 .pro文件中加入一下语句
QT += multimedia
QT += multimediawidgets
在ui文件中添加widget控件并提升为QVideoWidget控件
头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QCamera>
#include <QCameraImageCapture>
#include <QCameraViewfinder>
#include <QCameraViewfinderSettings>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void imageDisplay(int id,QImage img);
private:
Ui::MainWindow *ui;
QCamera* m_camera;
QCameraViewfinder* m_viewfinder;
QCameraImageCapture* m_capture;
};
#endif // MAINWINDOW_H
cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_camera = new QCamera();
m_viewfinder = new QCameraViewfinder(ui->widget);
m_capture = new QCameraImageCapture(m_camera);
// 设置摄像头输出模式
QCameraViewfinderSettings viewFinderSettings;
viewFinderSettings.setResolution(800,600); //设置分辨率
m_camera->setViewfinderSettings(viewFinderSettings);
m_camera->setViewfinder(m_viewfinder); //设置取景器
m_camera->setCaptureMode(QCamera::CaptureStillImage);
m_camera->start();
connect(ui->btnCapture,SIGNAL(clicked()),m_capture,SLOT(capture()));
connect(m_capture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(imageDisplay(int,QImage)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::imageDisplay(int id,QImage img)
{
QPixmap pixmap = QPixmap::fromImage(img);
//放缩图片
QPixmap fitPixmap= pixmap.scaled(320,240,Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
ui->label->setPixmap(fitPixmap);
}
此种方法较为简单,为常用接口,但是此方法有很大的弊端,当使用 QCameraImageCapture类时,该类会发射
void imageSaved(int id, const QString &fileName) 信号,无论你设置不设置存储路径,由于该信号的发射,都会自动保存你截图的图片,默认路径为电脑默认图片路径,由于刚开始未发现此数据,直接存储了20多万张图片。。。
---------------------
作者:llazy123
来源:CSDN
原文:https://blog.csdn.net/llazy123/article/details/80747760
版权声明:本文为博主原创文章,转载请附上博文链接!