1、解压qrencode3.4.4库包
2、新建两个文件夹,一个文件夹放.h头文件,另一个文件夹放.c实现文件
3、新建qt项目,加载头文件和实现文件
4、qt代码实现头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPainter>
#include <QPaintEvent>
#include <QImage>
#include <QDebug>
#include <QDateTime>
#include <QDate>
#include <QList>
#include <QPoint>
#include <QMessageBox>
#include "qrencode-3.4.4/qrencode.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
void GenerateQRcode(QString tempstring);
// QImage mainimg;
// int temp_width;
// int temp_height;
};
#endif // MAINWINDOW_H
5、代码实现
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("二维码生成工具");
ui->label->setText("该处显示二维码...");
this->setMaximumSize(449,336);//设置窗口固定大小
this->setMinimumSize(449,336);
//this->setStatusBar("123");
// temp_height = 150;
// temp_width = 150;
// mainimg=QImage(150,150,QImage::Format_ARGB32);
ui->label->setVisible(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::GenerateQRcode(QString tempstr)
{
#if 1
QRcode *qrcode; //二维码数据
//QR_ECLEVEL_Q 容错等级
qrcode = QRcode_encodeString(tempstr.toStdString().c_str(), 2, QR_ECLEVEL_Q, QR_MODE_8, 1);
qint32 temp_width=ui->label->width(); //二维码图片的大小
qint32 temp_height=ui->label->height();
qint32 qrcode_width = qrcode->width > 0 ? qrcode->width : 1;
double scale_x = (double)temp_width / (double)qrcode_width; //二维码图片的缩放比例
double scale_y =(double) temp_height /(double) qrcode_width;
QImage mainimg=QImage(temp_width,temp_height,QImage::Format_ARGB32);
QPainter painter(&mainimg);
QColor background(Qt::white);
painter.setBrush(background);
painter.setPen(Qt::NoPen);
painter.drawRect(0, 0, temp_width, temp_height);
QColor foreground(Qt::red);
painter.setBrush(foreground);
for( qint32 y = 0; y < qrcode_width; y ++)
{
for(qint32 x = 0; x < qrcode_width; x++)
{
unsigned char b = qrcode->data[y * qrcode_width + x];
if(b & 0x01)
{
QRectF r(x * scale_x, y * scale_y, scale_x, scale_y);
painter.drawRects(&r, 1);
}
}
}
QPixmap mainmap=QPixmap::fromImage(mainimg);
ui->label->setPixmap(mainmap);
ui->label->setVisible(true);
#endif
}
void MainWindow::on_pushButton_clicked()
{
QString str = ui->lineEdit->text();
if(str.isEmpty())
{
QMessageBox::information(this,"Error Message","input is empty!");
return ;
}
if(str.length() >128)
{
QMessageBox::information(this,"Error Message","input infomation is length!");
return ;
}
GenerateQRcode(str);
}
void MainWindow::on_pushButton_2_clicked()
{
ui->label->clear();
ui->label->setText("该处显示二维码...");
}
void MainWindow::on_pushButton_3_clicked()
{
}
本文介绍了一个使用Qt和qrencode库实现的简单二维码生成器。文章详细展示了如何从解压库包开始,到构建Qt项目并实现二维码生成的过程。通过简单的用户界面,用户可以输入文本并即时生成对应的二维码。
211

被折叠的 条评论
为什么被折叠?



