用QT5实现视频采集

2/13/2017来源:iOS开发人气:449

学习QT也有一段时间了,对QT稍有一点感觉,第一次自己写了一个相对有点用的程序,刚写完就献给广大热爱QT的好友,望你们参考,不对的地方请多多指教。

QT5 的用法我就不说了,不会的看看其他的教程。 首先建立工程,选择Widget类。

在.PRo文件中添加代码

QT += multimedia multimediawidgets

ui界面如下: 这里写图片描述 具体的控件用法我就不说了

widget.h的文件如下:

#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QCamera> #include <QCameraViewfinder> #include <QCameraImageCapture> #include <QPixmap> #include <QImage> #include <QDateTime> #include <QMessageBox> #include <QDesktopWidget> #include <QFileDialog> #include <QMovie> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); const QPixmap *pixmap; QString fileName; private slots: void on_start_clicked(); //开始按钮 void on_stop_clicked(); //停止按钮 void on_camerashort_clicked(); //截图按钮 void displayImage(int id, const QImage preview); void on_save_clicked(); //保存截图 void on_see_clicked(); //查看截图 private: Ui::Widget *ui; QCamera * camera; //定义 QCameraViewfinder *cameraViewfinder; QCameraImageCapture *cameraImageCapture; }; #endif // WIDGET_H

Widget.cpp的代码如下:

#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); cameraViewfinder = new QCameraViewfinder; camera = new QCamera; camera->setViewfinder(cameraViewfinder); ui->CameraLayout->addWidget(cameraViewfinder); cameraImageCapture = new QCameraImageCapture(camera,parent); connect(cameraImageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(displayImage(int,QImage))); } Widget::~Widget() { delete ui; } void Widget::displayImage(int id, const QImage image) { ui->label->setPixmap(QPixmap::fromImage(image));//将label指向照片,显示照片 } void Widget::on_start_clicked() //开始 { camera->start(); } void Widget::on_stop_clicked() //停止 { camera->stop(); } void Widget::on_camerashort_clicked() //截图 { cameraImageCapture->capture(); } void Widget::on_save_clicked() //保存截图 { pixmap =ui->label->pixmap(); fileName= QDateTime::currentDateTime().toString("yyyy-MM-ddHH-mm-ss") + ".jpg";//通过时间命名文件 if(!pixmap->save("C://Qt//Qt5.7.0//project//Camera01//savepicture//Camera"+fileName,"JPG")) { QMessageBox::information(this,"警告","保存错误!",QMessageBox::Ok); } else { QMessageBox::information(this,"祝贺","保存成功",QMessageBox::Ok); } //bool QImage::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const; //第一个参数是文件名,第二个是格式,第三个是质量 } void Widget::on_see_clicked() //查看截图 { QString filename1; filename1=QFileDialog::getOpenFileName(this, tr("选择图像"), "C:/", tr("Images (*.jpg)")); if(filename1.isEmpty()) { return; } else { QImage *img = new QImage; if(!(img->load(filename1))) //加载图像 { QMessageBox::information(this,"警告","打开图像失败",QMessageBox::Ok); delete img; return; } ui->label->setPixmap(QPixmap::fromImage(img->scaled(ui->label->size()))); //scaled(ui->label->size())指定文件的大小 } }

main.cpp的代码如下:

#include "widget.h" #include <Qapplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

以上就是详细的代码和创建流程,适合新手入门学习。