Qt 打印二维码
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
配置文件加入打印機(jī)支持:
QT += printsupport新建名稱為MyQRCode的Widget項(xiàng)目,在項(xiàng)目目錄下建立qrlib文件夾
通過以下地址下載三方支持庫(kù):
https://github.com/nayuki/QR-Code-generator把cpp目錄下以下六個(gè)文件拷貝到qrlib文件夾下
通過添加現(xiàn)有文件,把qr庫(kù)文件加入項(xiàng)目:
效果如下:
通過添加新文件加入新的頭文件及class文件:
在生成的頭文件(myqrcode.h)里下加入下代碼:
myqrcode.h
#ifndef MYQRCODE_H #define MYQRCODE_H#include <QObject>#include <QPrinter> #include <QPainter> #include "qrlib/QrCode.hpp"class MyQRCode : public QObject {Q_OBJECT public:explicit MyQRCode(QObject *parent = nullptr);void paintQR(QPainter &painter, QPoint point,const QSize sz, const QString &data, QColor fg);signals:public slots: };#endif // MYQRCODE_Hmyqrcode.cpp
#include "myqrcode.h"MyQRCode::MyQRCode(QObject *parent) : QObject(parent) {}void MyQRCode::paintQR(QPainter &painter, QPoint point, const QSize sz, const QString &data, QColor fg) {qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(data.toUtf8().constData(), qrcodegen::QrCode::Ecc::LOW);const int s=qr.getSize()>0?qr.getSize():1;const double w=sz.width();const double h=sz.height();const double aspect=w/h;const double size=((aspect>1.0)?h:w);const double scale=size/(s+2);// NOTE: For performance reasons my implementation only draws the foreground parts in supplied color.// It expects background to be prepared already (in white or whatever is preferred).painter.setPen(Qt::NoPen);painter.setBrush(fg);for(int y=0; y<s; y++) {for(int x=0; x<s; x++) {const int color=qr.getModule(x, y); // 0 for white, 1 for blackif(0!=color) {const double rx1=(x+1)*scale+point.x(), ry1=(y+1)*scale+point.y();QRectF r(rx1, ry1, scale, scale);painter.drawRects(&r,1);}}} }在mainwindow.h引入頭文件(myqrcode.h)和增加printQRCode函數(shù)接口:
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include "myqrcode.h"namespace Ui { class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();printQRCode();private:Ui::MainWindow *ui; };#endif // MAINWINDOW_H在mainwindow.cpp里增加printQRCode函數(shù)實(shí)現(xiàn):
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);printQRCode(); }MainWindow::~MainWindow() {delete ui; }MainWindow::printQRCode() {QPrinter printer; // printer.setPrinterName("DASCOM DS-650Pro"); //打印機(jī)名稱printer.setPrinterName("CutePDF Writer");QPainter painter(&printer);QSize size;size.setWidth(300);size.setHeight(300);MyQRCode qr;qr.paintQR(painter,QPoint(150,200),size,"你好 渣渣曦",QColor(0, 160, 230));painter.end(); }PDF打印機(jī)打印結(jié)果如下:
轉(zhuǎn)載于:https://my.oschina.net/zhizhisoft/blog/1802662
總結(jié)
- 上一篇: xposed输出qq加密前明文数据
- 下一篇: 软件需求分析案列_软件需求分析(案例)