window.open('http://www.qtcn.org/bbs/attachment/Mon_1604/17_166243_540721ef534129b.png?13');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >照功能
/*********************************************mainwindow.h********************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void captureImage(); //捕捉画面图片
void displayImage(int , QImage); //显示图片
void saveImage(); //保存图片
private:
Ui::MainWindow *ui;
QCamera *camera; //声明一个摄像机类指针
QCameraViewfinder *viewfinder; //声明一个摄像机视图取景器
QCameraImageCapture *imageCapture; //声明一个
图像捕捉类
};
#endif // MAINWINDOW_H
/***********************************************************mainwindow.cpp*****************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
camera = new QCamera(this); //创建相机
viewfinder = new QCameraViewfinder(this); //创建视图取景器
imageCapture = new QCameraImageCapture(camera); //创建图像捕捉器
ui->verticalLayout->addWidget(viewfinder); //向垂直布局中添加视图取景器部件
ui->label_display->setScaledContents(true); //通过setScaledContents(bool)设置图片自适应标签label
camera->setViewfinder(viewfinder); //通过函数setViewfinder(QVideoWidget viewfinder)设置视图取景器
camera->start(); //开启摄像头
connect(imageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(displayImage(int,QImage)));
connect(ui->Capture_Button,SIGNAL(clicked(bool)),this,SLOT(captureImage()));
connect(ui->Save_Button,SIGNAL(clicked(bool)),this,SLOT(saveImage()));
connect(ui->Exit_Button,SIGNAL(clicked(bool)),qApp,SLOT(quit()));
}
MainWindow::~MainWindow()
{
delete ui;
}
//捕捉图片(拍照)
void MainWindow::captureImage()
{
ui->statusBar->showMessage(tr("正在捕获图片"),5000); //设置状态栏
显示的信息
imageCapture->capture(); //通过捕捉函数capture()拍照
}
//显示捕捉到的图片
void MainWindow::displayImage(int ,QImage image)
//为什么QImage image作为函数形参是可以实现拍照效果,而当QImage image不作为函数形参声明在函数体内时不可以实现拍照功能{
ui->label_display->setPixmap(QPixmap::fromImage(image)); //通过函数setPixmap()将图片绑定到显示标签中
// ui->label_2->setPixmap(QPixmap::fromImage(image));
ui->statusBar->showMessage(tr("捕获成功"),5000);
return ;
}
void MainWindow::saveImage()
{
QString fileName = QFileDialog::getSaveFileName(this,tr("保存到文件"),QDir::homePath(),tr("jpeg格式
文件(*.jpg)"));
if(fileName.isEmpty())
{
ui->statusBar->showMessage(tr("保存操作取消"),5000);
return ;
}
const QPixmap *pixmap = ui->label_display->pixmap();
if(pixmap)
{
pixmap->save(fileName);
ui->statusBar->showMessage(tr("保存成功"),5000);
}
}