QT 调用摄像头拍照

QT 调用摄像头拍照

首先在.pro中添加:

QT       += multimedia multimediawidgets

mainwindow.h头文件如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    /* 摄像头设备 */
    QCamera *camera;
    /* 截图部件 */
    QCameraImageCapture *imageCapture;
    /* 摄像头取景器部件 */
    QCameraViewfinder *viewfinder;

private slots:

    void setCamera(const QCameraInfo &cameraInfo);
    void changeCameraDevice(QAction *action);
};

#endif // MAINWINDOW_H

mainwindow.cpp文件修改如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
Q_DECLARE_METATYPE(QCameraInfo)
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QActionGroup *videoDevicesGroup = new QActionGroup(this);
    videoDevicesGroup->setExclusive(true);
    QListcameras =  QCameraInfo::availableCameras();
    if(cameras.count() > 0)
    {
        foreach (const QCameraInfo &cameraInfo,cameras)
        {
            qDebug()<setCheckable(true);
            videoDeviceAction->setData(QVariant::fromValue(cameraInfo));
            if (cameraInfo == QCameraInfo::defaultCamera())
                videoDeviceAction->setChecked(true);
            /* 添加动作*/
            ui->DeviceMenu->addAction(videoDeviceAction);
        }
    }
    /* 这三个声明必须有 */
    camera = new QCamera(QCameraInfo::defaultCamera());
    viewfinder = new QCameraViewfinder(this);
    imageCapture = new QCameraImageCapture(camera);
    connect(videoDevicesGroup, SIGNAL(triggered(QAction*)), SLOT(changeCameraDevice(QAction *action)));
    setCamera(QCameraInfo::defaultCamera());
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::setCamera(const QCameraInfo &cameraInfo)
{
    delete imageCapture;
    delete viewfinder;
    delete camera;
    camera = new QCamera(cameraInfo);
    viewfinder = new QCameraViewfinder(this);
    imageCapture = new QCameraImageCapture(camera);
    ui->horizontalLayout->addWidget(viewfinder);
    imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
    camera->setCaptureMode(QCamera::CaptureStillImage);
    camera->setViewfinder(viewfinder);
    camera->start();//启动摄像头
}
void MainWindow::changeCameraDevice(QAction *action)
{
    setCamera(qvariant_cast(action->data()));
}



效果如下:

QT 调用摄像头拍照_第1张图片

你可能感兴趣的:(QT,QT)