學習QT也有一段時間了,對QT稍有一點感覺,第一次自己寫了一個相對有點用的程序,剛寫完就獻給廣大熱愛QT的好友,望你們參考,不對的地方請多多指教。
QT5 的用法我就不說了,不會的看看其他的教程。 首先建立工程,選擇Widget類。
在.PRo文件中添加代碼
QT += multimedia multimediawidgetsui界面如下: 具體的控件用法我就不說了
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_OBJECTpublic: 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_HWidget.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();}以上就是詳細的代碼和創建流程,適合新手入門學習。
新聞熱點
疑難解答