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

news2025/1/23 17:41:24

目录

一、前提

二、如何引用静态链接库

三、如何引用动态链接库

四、示例代码资源


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

win32:!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如何引用静态链接库”一样。

工程运行的效果图:

四、示例代码资源

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1821074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[大模型]Phi-3-mini-4k-instruct langchain 接入

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 。 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行演示。 创建工作…

10大wordpress外贸主题

手动工具wordpress外贸模板 适合生产套筒扳、管钳、工具箱、斧子、锤子、防爆工具、螺丝刀、扳手等手动工具的厂家。 https://www.jianzhanpress.com/?p4806 Invisible Trade WP外贸网站模板 WordPress Invisible Trade外贸网站模板&#xff0c;做进出口贸易公司官网的word…

7-25 数字三角形问题

7-25 数字三角形问题 分数 10 全屏浏览 作者 夏仁强 单位 贵州工程应用技术学院 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法&#xff0c;计算出从三角形的顶至底的一条路径&#xff0c;使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角…

【Spring】Spring事务相关源码分析

目录&#xff1a; 1.讲述事务的一些基础概念。 2.讲述事务的生命周期源码 3.配置事务&#xff0c;以及事务注解的源码 1.前言 具体事务中Spring是怎么管理事务&#xff0c;怎么去管理、创建、销毁等操作的呢&#xff1f;这一次来分解一下。 2.事务概述&#xff08;复习&a…

MySQL的增删查改(CRUD)

目录 一.CRUD 1.什么是CRUD 2.CRUD的特点 二.新增&#xff08;Create&#xff09; 单列插入全行数据 表的复制 额外小知识 三.阅读(Read) 1.全表查询指定列查询 2.查询字段为表达式 3.别名 ​编辑 4.去重 5.排序 1.根据列名进行排序 2.使用表达式及别名进行排序…

读AI未来进行式笔记12读后总结与感想兼导读

1. 基本信息 AI未来进行式 李开复 陈楸帆 著 浙江人民出版社,2022年5月出版 1.1. 读薄率 书籍总字数301千字&#xff0c;笔记总字数39650字。 读薄率39650301000≈13.2% 1.2. 读厚方向 千脑智能 脑机穿越 未来呼啸而来 虚拟人 AI3.0 新机器人 人工不智能&#xff…

搜索与图论:染色法判别二分图

搜索与图论&#xff1a;染色法判别二分图 题目描述参考代码 题目描述 输入样例 4 4 1 3 1 4 2 3 2 4输出样例 Yes参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010, M 200010;int n, m; i…

[C][数据结构][排序][下][快速排序][归并排序]详细讲解

文章目录 1.快速排序1.基本思想2.hoare版本3.挖坑法4.前后指针版本5.非递归版本改写 2.归并排序 1.快速排序 1.基本思想 任取待排序元素序列的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右…

自然语言处理领域的重大挑战:解码器 Transformer 的局限性

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Undertow学习

Undertow介绍 Undertow是一个用java编写的灵活、高性能的web服务器&#xff0c;提供基于NIO的阻塞和非阻塞API。 Undertow有一个基于组合的体系结构&#xff0c;允许您通过组合小型单用途处理程序来构建web服务器。为您提供了在完整的Java EE servlet 4.0容器或低级别非阻塞处…

【JavaEE精炼宝库】多线程(5)单例模式 | 指令重排序 | 阻塞队列

目录 一、单例模式&#xff1a; 1.1 饿汉模式&#xff1a; 1.2 懒汉模式&#xff1a; 1.2.1 线程安全的懒汉模式&#xff1a; 1.2.2 线程安全的懒汉模式的优化&#xff1a; 二、指令重排序 三、阻塞队列 3.1 阻塞队列的概念&#xff1a; 3.2 生产者消费者模型&#xf…

计算机网络之网络层知识总结

网络层功能概述 主要任务 主要任务是把分组从源端传到目的端&#xff0c;为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。 分组和数据报的关系&#xff1a;把数据报进行切割之后&#xff0c;就是分组。 主要功能&#xff1a; 路由选择与分组转发 路由器…

ResNet——Deep Residual Learning for Image Recognition(论文阅读)

1.什么是ResNet ResNet是一种残差网络&#xff0c;咱们可以把它理解为一个子网络&#xff0c;这个子网络经过堆叠可以构成一个很深的网络。下面是ResNet的结构。 2.为什么要引入ResNet 理论上来说&#xff0c;堆叠神经网络的层数应该可以提升模型的精度。但是现实中真的是这…

SwiftUI中UIViewRepresentable的使用(UIKit与SwiftUI的桥梁)

UIViewRepresentable是一个协议&#xff0c;用于创建一个SwiftUI视图&#xff0c;该视图包装了一个UIKit视图。通过实现UIViewRepresentable协议&#xff0c;我们可以在SwiftUI中使用自定义的UIKit视图&#xff0c;并与SwiftUI进行交互。 实现UIViewRepresentable 创建一个遵…

DT浏览器很好用

简单的浏览器&#xff0c;又是强大的浏览器&#xff0c;界面简洁大方&#xff0c;操作起来非常流畅&#x1f60e;&#xff0c;几乎不会有卡顿的情况。 搜索功能也十分强大&#x1f44d;&#xff0c;能够快速精准地找到想要的信息。 而且还有出色的兼容性&#xff0c;各种网页都…

qt 实现模拟实际物体带速度的移动(水平、垂直、斜角度)——————附带完整代码

文章目录 0 效果1 原理1.1 图片旋转1.2 物体带速度移动 2 完整实现2.1 将车辆按钮封装为一个类&#xff1a;2.2 调用方法 3 完整代码参考 0 效果 实现后的效果如下 可以显示属性&#xff08;继承自QToolButton&#xff09;: 鼠标悬浮显示文字 按钮显示文字 1 原理 类继承…

单链表经典算法题 1

前言 学习了单链表&#xff0c;我们就做一些题来巩固一下。还有就是解题方法不唯一&#xff0c;我就只讲述为自己的方法。 目录 前言 1.移除链表元素 思路 代码 2.反转链表 思路 代码 3.链表的中间节点 思路 代码 总结 1.移除链表元素 思路 我们创建一个新的表…

FM全网自动采集聚合影视搜索源码

源码介绍 FM 全网聚合影视搜索(响应式布局)&#xff0c;基于 TP5.1 开发的聚合影视搜索程序&#xff0c;本程序无数据库&#xff0c;本程序内置P2P 版播放器&#xff0c;承诺无广告无捆绑。片源内部滚动广告与本站无关,谨防上当受骗&#xff0c;资源搜索全部来自于网络。 环境…

Java面向对象之static关键字,可变参数,递归,数组常见算法,对象数组,方法参数

第一章.static关键字 1.static的介绍以及基本使用 1.概述:static是一个静态关键字 2.使用:a.修饰一个成员变量:static 数据类型 变量名b.修饰一个方法:修饰符 static 返回值类型 方法名(形参){方法体return 结果}3.调用静态成员:类名直接调用(不用new对象)4.静态成员特点:a.静…

智慧守护 畅游无忧——北斗应急呼叫柱,为景区安全加码

在大自然的怀抱中&#xff0c;中型及大型公园、景区以其壮丽风光吸引着成千上万的游客前来探索&#xff0c;成为了人们休闲娱乐的好去处。然而&#xff0c;广袤的区域、复杂的地形和分散的人流也给安全保障带来了前所未有的挑战。传统的巡逻方式难以覆盖每一个角落&#xff0c;…