#include "camerawindow.h" #include "ui_camerawindow.h" CameraWindow::CameraWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::CameraWindow), hasResolution(false) { ui->setupUi(this); cameraSurface = new CameraSurface(); camera = new QCamera(); capture = new QCameraImageCapture( camera ); camera->setViewfinder(cameraSurface); camera->setCaptureMode(QCamera::CaptureStillImage); camera->start(); zxing = new QZXing( QZXing::DecoderFormat_QR_CODE, this ); connect(zxing, SIGNAL(tagFound(QString)), this, SLOT(showResult(QString))); connect(cameraSurface, SIGNAL(novoFrame(QByteArray&,int,int)), this, SLOT(frameHandler(QByteArray&,int,int))); } CameraWindow::~CameraWindow() { delete ui; delete cameraSurface; delete camera; delete capture; delete viewfinder; delete zxing; delete img; delete buffer; } void CameraWindow::frameHandler(QByteArray &buff, int w, int h) { if (!hasResolution) { img = new QImage( w, h, QImage::Format_RGB32 ); hasResolution = true; } u_int32_t* data = (u_int32_t*)buff.data(); for(int y = 0; y < h; ++y) { QRgb* scan = (QRgb*)img->scanLine(y); for(int x = 0; x < w; ++x) { scan[x] = data[y * w + x]; } } zxing->decodeImage( *img, w, h, true ); QImage imgTmp = img->scaled(w*.30, h*.30); ui->label->setPixmap(QPixmap::fromImage(imgTmp)); buff.clear(); } void CameraWindow::closeEvent(QCloseEvent *event) { emit close(); event->accept(); } void CameraWindow::showResult(QString result) { ui->label_2->setText(result); }