Step4:修改mainwindow.cpp

源码如下

#include "mainwindow.h"

#include "ui_mainwindow.h"

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->ImageView->addWidget(viewfinder);

ui->ImageCapture->setScaledContents(true);

camera->setViewfinder(viewfinder);

camera->start();

connect(imageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(displayImage(int,QImage)));

connect(ui->buttonCapture, SIGNAL(clicked()), this, SLOT(captureImage()));

connect(ui->buttonSave, SIGNAL(clicked()), this, SLOT(saveImage()));

connect(ui->buttonQuit, SIGNAL(clicked()), qApp, SLOT(quit()));

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::captureImage()

{

ui->statusBar->showMessage(tr("capturing..."), 1000);

imageCapture->capture();

}

void MainWindow::displayImage(int , QImage image)

{

ui->ImageCapture->setPixmap(QPixmap::fromImage(image));

ui->statusBar->showMessage(tr("capture OK!"), 5000);

}

void MainWindow::saveImage()

{

QString fileName=QFileDialog::getSaveFileName(this, tr("save file"), QDir::homePath(), tr("jpegfile(*.jpg)"));

if(fileName.isEmpty()) {

ui->statusBar->showMessage(tr("save cancel"), 5000);

return;

}

const QPixmap* pixmap=ui->ImageCapture->pixmap();

if(pixmap) {

pixmap->save(fileName);

ui->statusBar->showMessage(tr("save OK"), 5000);

}

}

Step5:编译工程效果如下

30eb4039b912c0d85ad1b8c3937fa799.png

总结:QCamera类封装了很多底层操作,为了更进一步地了解Linux下摄像头的调用机制,我将在后续探讨V4L2及ioctl操作摄像头的机理。

Qt 的详细介绍:请点这里

Qt 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐