定義一個繼承自QWidget類的窗口類,如下:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QImage>
#include <QCamera>
#include <QString>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QPushButton>
#include <QVBoxLayout>
#include <QFileDialog>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public slots:
void cameraImageCaptured(int,QImage);
void on_exitButtonClicked();
private:
Ui::Widget *ui;
QCamera* camere;
QCameraViewfinder* viewfinder;
QCameraImageCapture* imageCapture;
};
#endif // WIDGET_H
widget.cpp的代碼邏輯實現,如下:
#include "widget.h"
#include "ui_widget.h"
#include "FaceppApilib/FaceppApi.hpp"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("Camera");
camere =new QCamera(this);
viewfinder =new QCameraViewfinder(this); //設置取景器
imageCapture =new QCameraImageCapture(camere); //圖片捕獲
QPushButton* button1 =new QPushButton("Capture");
QPushButton* button2 =new QPushButton("Exit");
QVBoxLayout* mainLayout =new QVBoxLayout(this);
mainLayout->addWidget(viewfinder); //將取景器加入主界面中
mainLayout->addWidget(button1);
mainLayout->addWidget(button2)
connect(button1,SIGNAL(clicked()),imageCapture,SLOT(capture())); //將按鍵和圖片捕獲的槽函數綁定,點擊按鈕進行拍照
connect(button2,SIGNAL(clicked()),this,SLOT(on_exitButtonClicked()));
connect(imageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(cameraImageCaptured(int,QImage)));
imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);//設置捕獲的目的
camere->setCaptureMode(QCamera::CaptureStillImage);//設置捕獲模式爲將捕獲的圖片作爲文件
camere->setViewfinder(viewfinder);
camere->start();
}
Widget::~Widget()
{
delete ui;
}
void Widget::cameraImageCaptured(int,QImage image)
{ //保存圖片格式,路徑
QString savepath=QFileDialog::getSaveFileName(this,"Save Capture","Capture",
"Image png(*.png);;Image jpg(*.jpe);;Image bmp(*.bmp)");
if(!savepath.isEmpty()){
image.save(savepath);
}
}
void Widget::on_exitButtonClicked()
{
camere->stop();//關閉攝像頭
close();
}