赞
踩
目录
在开发项目中经常会存在需要调用第三方库的时候,对于Qt如何来调用第三方库,为了方便自己特意记录下详细过程。
1. window 10操作系统
2. 已安装了Qt6.7.0版本,官方下载网站一步到位:Download Qt OSS: Get Qt Online Installer
另外QT5版本也适用。
3、本示例中用第三方库(qrencode库)来举例。
其中qrencode库的静态链接文件为:libqrencode.a
qrencode库的动态链接文件为:qrencode.dll
库的导出头文件为:qrencode.h
必备的两个文件:qrencode.h、libqrencode.a(或者.lib文件)
工程目录数结构,可以参照如下:
bin文件夹: 存放最后编译的工程app可执行文件
include文件夹:存放第三方库依赖的头文件,qrencode.h
libs文件夹: 存放静态链接库,libqrencode.a
文件放置后,开始在工程项目中引用它:
然后下一步,即可在.pro文件中自动添加如下的信息:
win32: LIBS += -L$$PWD/../libs/ -lqrencode
INCLUDEPATH += $$PWD/../include
DEPENDPATH += $$PWD/../includewin32:!win32-g++: PRE_TARGETDEPS += $$PWD/../libs/qrencode.lib
else:win32-g++: PRE_TARGETDEPS += $$PWD/../libs/libqrencode.a
另外:指定项目放置.exe文件存放的路径为bin的方法,在.pro文件中增加:
DESTDIR = $$PWD/../bin #指定在何处放置目标文件
然后在工程中即可进行二维码的相关操作,在使用的地方进行“#include "qrencode.h"”。关键性代码如下:
- #include "qrencode.h"
-
-
- void MainWindow::on_pushButton_ok_clicked()
- {
- QString text = ui->lineEdit_content->text();
-
- QPixmap qrPixmap;
- int width = ui->label_code->width();
- int height = ui->label_code->height();
- gernerateQRCode(text, qrPixmap, 10);
- qrPixmap = qrPixmap.scaled(QSize(width, height), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
-
- ui->label_code->setPixmap(qrPixmap);
-
- }
-
- void MainWindow::gernerateQRCode(const QString &text, QPixmap &qrPixmap, int scale)
- {
- if(text.isEmpty()) {
- return;
- }
-
- //二维码数据
- QRcode *qrCode = nullptr;
-
- //这里二维码版本传入参数是2,实际上二维码生成后,它的版本是根据二维码内容来决定的
- qrCode = QRcode_encodeString(text.toStdString().c_str(), 2, QR_ECLEVEL_Q, QR_MODE_8, 1);
- if(nullptr == qrCode) {
- return;
- }
-
- int qrCode_Width = qrCode->width > 0 ? qrCode->width : 1;
- int width = scale * qrCode_Width;
- int height = scale * qrCode_Width;
-
- QImage image(width, height, QImage::Format_ARGB32_Premultiplied);
-
- QPainter mPainter(&image);
- QColor background(Qt::white);
- mPainter.setBrush(background);
- mPainter.setPen(Qt::NoPen);
- mPainter.drawRect(0, 0, width, height);
- QColor foreground(Qt::black);
- mPainter.setBrush(foreground);
- for(int y = 0; y < qrCode_Width; ++y) {
- for(int x = 0; x < qrCode_Width; ++x){
- unsigned char character = qrCode->data[y * qrCode_Width + x];
- if(character & 0x01) {
- QRect rect(x * scale, y * scale, scale, scale);
- mPainter.drawRects(&rect, 1);
- }
- }
- }
-
- qrPixmap = QPixmap::fromImage(image);
- QRcode_free(qrCode);
- }
工程运行的效果图:
大致步骤和“3.1如何引用静态链接库”一样,不同的地方如下几点:
必备的两个文件:qrencode.h、qrencode.dll
工程目录数结构,可以参照如下:
bin文件夹: 存放最后编译的工程app可执行文件、以及动态链接库,qrencode.dll
include文件夹:存放第三方库依赖的头文件,qrencode.h
文件放置后,开始在工程项目中引用它:
直接在.pro文件中进行引用:
win32: LIBS += $$PWD/../bin/qrencode.dll
INCLUDEPATH += $$PWD/../include
另外:指定项目放置.exe文件存放的路径为bin的方法,在.pro文件中增加:
DESTDIR = $$PWD/../bin #指定在何处放置目标文件
然后在工程中即可进行二维码的相关操作,在使用的地方进行“#include "qrencode.h"”。关键性代码和“3.1如何引用静态链接库”一样。
工程运行的效果图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。