做个生成和扫描二维码的windows小应用
来源:互联网 发布:unity3d 做个黑洞 编辑:程序博客网 时间:2024/05/29 08:58
想做一个视频聊天的程序,因为用到了编码和解码,所以几天一直在自学ffmpeg。无从下手便从最经典的output_examples.c代码看起。着手重写一遍才发现,很多很多API和宏定义都完全不一样了,结合APIChanges
和度娘坑坑洼洼地写了几天快写完了,昨天凌晨手残忘记保存关机了,全没了。不过无所谓了,差不多理解了(强行安慰自己)。在这几天,花了一天时间用qt做了个二维码的小程序,生成二维码用的是libqr(好像是一个日本人做的库),解码用的是QZXing,虽然对二维码原理不是特别清楚,但是靠着强大的三方库还是完成了。现在贴下主要的mywidget.cpp代码,写的比较烂,希望大神不要嘲笑我这个菜。
下面贴出的是部分最主要的代码,完整的源码打包在http://download.csdn.net/download/qq_26654257/10115655,资源2分。
#include "mywidget.h"#include "ui_mywidget.h"#include <QImage>#include <QPixmap>#include <QDebug>#include "qr.h"#include <QFile>#include <QFileDialog>#include <QMessageBox>QImage saveImage;QImage openImage;MyWidget::MyWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MyWidget){ cam = new QCamera(this);//Qt5才有的类,操作摄像头的类 vfinder = new QCameraViewfinder;//Qt5才有的类,显示摄像头画面的窗口 vfinder->setGeometry(100, 100, 500, 350); cam->setViewfinder(vfinder); imageCapture = new QCameraImageCapture(cam);//Qt5才有的类,截取摄像头一帧画面的类 /*设定时器,过段时间就截取一帧画面扫描是否有二维码*/ m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(handleTimeout())); connect(imageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(handleImageCapture(int, QImage))); pDecoder = new QZXing(QZXing::DecoderFormat_MAXICODE);//QZXing解码器 imageShow = new QLabel; ui->setupUi(this);}MyWidget::~MyWidget(){ delete ui;}/*libqr库,主要根据你输入的信息生成二维码*/void MyWidget::on_pushButton_clicked(){ int errorCode = QR_ERR_NONE; QRCode *qr = qrInit(1,QR_EM_8BIT,1,1,&errorCode);//QRCode* qr; if(qr == NULL) { qDebug()<<"errorCode="<<errorCode; } QString stringData = ui->input->text(); qrAddData(qr, (const qr_byte_t *) stringData.toStdString().data(), stringData.toStdString().length()); if(!qrFinalize(qr)) { qDebug()<<"errorCode="<<errorCode; } int size = 0; qr_byte_t *buffer = qrSymbolToBMP(qr,1,5,&size); if(buffer == NULL) { qDebug()<<"errorCode="<<errorCode; } saveImage = QImage::fromData(buffer,size); ui->QR_Show->setPixmap(QPixmap::fromImage(QImage::fromData(buffer,size))); ui->QR_Show->setAlignment(Qt::AlignHCenter |Qt::AlignVCenter);}void MyWidget::on_pushButton_2_clicked(){ if(ui->pushButton_2->text() == "开始扫描") { ui->pushButton_2->setText("关闭扫描"); cam->start(); vfinder->show(); if(!m_timer->isActive()) { m_timer->start(1000); } } else if(ui->pushButton_2->text() == "关闭扫描") { ui->pushButton_2->setText("开始扫描"); cam->stop(); vfinder->hide(); if(m_timer->isActive()) { m_timer->stop(); } }}/*截取摄像头画面*/void MyWidget::handleTimeout(){ imageCapture->capture();}/*QZXing扫描截取的图片有没有二维码,有的话解析*/void MyWidget::handleImageCapture(int, QImage image){ QString information = pDecoder->decodeImage(image); if(!information.isEmpty()) { ui->label_3->setText(information); qDebug() << information; }}/*保存生成的二维码*/void MyWidget::on_pushButton_3_clicked(){ QString filePath = QFileDialog::getSaveFileName(this, tr("保存"), "./", ""); if(!filePath.isEmpty()) { if(!saveImage.isNull()) { saveImage.save(filePath); } else { QMessageBox q; q.about(this, "Warning", "二维码图片不存在"); } } qDebug()<< filePath;}/*从本地打开二维码图片进行扫描*/void MyWidget::on_pushButton_4_clicked(){ QString filePath = QFileDialog::getOpenFileName(this, tr("d打开"), "./", ""); if(!filePath.isEmpty()) { openImage.load(filePath); imageShow->setPixmap(QPixmap::fromImage(openImage)); imageShow->show(); QString information = pDecoder->decodeImage(openImage); if(!information.isEmpty()) { ui->label_3->setText(information); qDebug() << information; } }}
阅读全文
1 0
- 做个生成和扫描二维码的windows小应用
- 二维码的扫描和生成
- 二维码的扫描和生成
- 二维码的生成和扫描
- 二维码的生成和扫描
- 二维码的 扫描和生成
- 二维码的生成和扫描
- 二维码的生成和扫描
- 二维码的生成和扫描
- 二维码的扫描和生成
- 二维码的生成和扫描
- 二维码的扫描和生成二维码
- 二维码的应用,扫描二维码和生成二维码,使用回传值,导入依赖
- 二维码的应用,扫描二维码和生成二维码,使用回传值,导入依赖
- 二维码生成和二维码扫描
- 扫描二维码和生成二维码
- 生成二维码和扫描二维码
- 扫描二维码和生成二维码
- HTML 引用
- python shutil模块常用方法
- Binder总体架构分析
- HDU-2844 Coins(完全背包)
- 大数据1-Hadoop架构中的消息传输(ActiveMQ)
- 做个生成和扫描二维码的windows小应用
- MySQL行转列操作
- PyCharm professional 2017激活
- 关于Java 泛型中的 问号
- 使用SSH反向隧道进行内网穿透
- CentOS Linux 6.8 常用命令
- 11月 新出的crypted_uridzu@aaathats3as_com 新型勒索病毒 可恢复
- 在Maven工程中java中@override报错
- Python List append()方法应用