Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll)

2024-06-04 3075阅读

目录

一、前提

二、如何引用静态链接库

三、如何引用动态链接库

四、示例代码资源


在开发项目中经常会存在需要调用第三方库的时候,对于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

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第1张

文件放置后,开始在工程项目中引用它:

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第2张

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第3张

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第4张

然后下一步,即可在.pro文件中自动添加如下的信息:

win32: LIBS += -L$$PWD/../libs/ -lqrencode

INCLUDEPATH += $$PWD/../include

DEPENDPATH += $$PWD/../include

win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../libs/qrencode.lib

else:win32-g++: PRE_TARGETDEPS += $$PWD/../libs/libqrencode.a

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第5张

另外:指定项目放置.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 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);
}

工程运行的效果图:

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第6张

三、如何引用动态链接库

大致步骤和“3.1如何引用静态链接库”一样,不同的地方如下几点:

必备的两个文件:qrencode.h、qrencode.dll

工程目录数结构,可以参照如下:

bin文件夹:       存放最后编译的工程app可执行文件、以及动态链接库,qrencode.dll

include文件夹:存放第三方库依赖的头文件,qrencode.h

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第7张

文件放置后,开始在工程项目中引用它:

直接在.pro文件中进行引用:

win32: LIBS += $$PWD/../bin/qrencode.dll

INCLUDEPATH += $$PWD/../include

另外:指定项目放置.exe文件存放的路径为bin的方法,在.pro文件中增加:

DESTDIR = $$PWD/../bin #指定在何处放置目标文件

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第8张

然后在工程中即可进行二维码的相关操作,在使用的地方进行“#include "qrencode.h"”。关键性代码和“3.1如何引用静态链接库”一样。

工程运行的效果图:

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll) 第9张

四、示例代码资源

资源链接:window下Qt如何调用第三方库qrencode(静态链接库、动态链接库)的示例工程


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]