当前位置: 首页 > wzjs >正文

网站开发技术 文库好用的视频播放器app

网站开发技术 文库,好用的视频播放器app,外链发布平台有哪些,花钱做网站前言 本篇为持续更新状态,内容包含window、Linux下打动态库包,以及引入动态库包的方式。 一、window 1、动态库打包 以百度的OCR接口调用打dll库为例,以下为qtcreator创建动态库过程: 1.1Qtcreator创建lib项目 创建成功后&…

前言

        本篇为持续更新状态,内容包含window、Linux下打动态库包,以及引入动态库包的方式。

一、window

1、动态库打包

以百度的OCR接口调用打dll库为例,以下为qtcreator创建动态库过程:

1.1Qtcreator创建lib项目

创建成功后,即包含以下5个文件,其中baiduocrlib.h和baiduocrlib.cpp是生成动态库文件的主要文件,baiduocrlib_global.h是引入baiduocrlib动态库时,必须包含的文件(在引入动态库时详细介绍)。

1.2修改动态库输出目录

动态库是通过“构建”生成的,不能“运行”生成,在.pro文件中,加入一行

#在baiduocrlib.cpp的同级目录,创建一个dll目录,生成的动态库将存在此目录下
DESTDIR = ../dll

点击左下角的“锤子”进行项目构建,即可在dll下看到生成的动态库文件,如下图所示

1.3编写动态库内容

与常规编写的类是一样,即在头文件中定义,在cpp文件中定义,头文件baiduocrlib.h内容如下


#ifndef BAIDUOCRLIB_H
#define BAIDUOCRLIB_H#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <QUrl>
#include <QUrlQuery>
#include <QJsonDocument>
#include <QJsonObject>
#include <QObject>
#include <QDebug>
#include <QFile>
#include <QImage>
#include <QBuffer>
#include <QtCore/qglobal.h>#if defined(BAIDUOCRLIB_LIBRARY)
#  define BAIDUOCRLIB_EXPORT Q_DECL_EXPORT
#else
#  define BAIDUOCRLIB_EXPORT Q_DECL_IMPORT
#endifclass BAIDUOCRLIB_EXPORT Baiduocrlib
{
public:Baiduocrlib();QByteArray  block_post_data(const QNetworkRequest& request,const QUrlQuery& postData);QString get_access_token(const QString& client_id,const QString& client_secret) ;QByteArray get_ocr_data_by_png(const QString& access_token,const QString& img_base64_content);QByteArray get_ocr_data_by_pdf(const QString& access_token,const QString& pdf_base64_content);int get_pdf_urlcontent(const QString& pdfFilePath,QString& urlEncodedString);int  get_img_urlcontent(const QString& imagePath,QString& urlEncodedString);
};#endif // BAIDUOCRLIB_H

cpp文件baiduocrlib.cpp内容如下

#include "baiduocrlib.h"Baiduocrlib::Baiduocrlib()
{
}QString Baiduocrlib::get_access_token(const QString& client_id,const QString& client_secret) {QString access_token;QUrl url("https://aip.baidubce.com/oauth/2.0/token");QNetworkRequest request(url);request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");request.setRawHeader("Accept", "application/json");// 创建 POST 数据QUrlQuery postData;postData.addQueryItem("grant_type", "client_credentials");postData.addQueryItem("client_id", client_id);postData.addQueryItem("client_secret", client_secret);//发送Post包(通过阻塞方式获取返回结果)QByteArray jsonData=block_post_data(request,postData);// 解析 JSON 数据QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);if (jsonDoc.isNull()) {qDebug() << "Failed to create JSON doc.";return "";}// 检查 JSON 文档类型if (jsonDoc.isObject()) {QJsonObject jsonObj = jsonDoc.object();//qDebug() << "JSON Object:" << jsonObj;// 访问 JSON 对象中的数据if (jsonObj.contains("access_token")) {access_token = jsonObj["access_token"].toString();qDebug() << "access_token:" << access_token;}} else {qDebug() << "JSON is not an object.";}return access_token;
}QByteArray Baiduocrlib::block_post_data(const QNetworkRequest& request,const QUrlQuery& postData){//QString resstr;QByteArray responseData;// 创建网络访问管理器QNetworkAccessManager block_manager;// 发送POST请求QNetworkReply* reply = block_manager.post(request, postData.toString(QUrl::FullyEncoded).toUtf8());// 创建一个事件循环来阻塞当前线程QEventLoop loop;QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);// 阻塞当前线程直到网络请求完成loop.exec();// 检查请求结果if (reply->error() == QNetworkReply::NoError) {// 请求成功,处理返回的数据/*QByteArray */responseData = reply->readAll();//resstr = QString::fromUtf8(responseData);//qDebug() << __LINE__ <<"Response:" << resstr;} else {// 请求失败,处理错误qDebug() << "Error:" << reply->errorString();responseData="";}// 清理reply->deleteLater();return responseData;
}QByteArray Baiduocrlib::get_ocr_data_by_png(const QString& access_token,const QString& img_base64_content){//QString urlstr=QString("https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=%1").arg(access_token);//标准含位置版本QString urlstr=QString("https://aip.baidubce.com/rest/2.0/ocr/v1/accurate?access_token=%1").arg(access_token);//高精度含位置版本QUrl url(urlstr);QNetworkRequest request(url);request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");request.setRawHeader("Accept", "application/json");// 创建 POST 数据QUrlQuery postData;postData.addQueryItem("image", img_base64_content);postData.addQueryItem("detect_direction", "false");postData.addQueryItem("paragraph", "false");postData.addQueryItem("probability", "false");postData.addQueryItem("multidirectional_recognize", "false");//发送Post包(通过阻塞方式获取返回结果)QByteArray jsonData=block_post_data(request,postData);//qDebug() << __LINE__ <<"jsonData:" << jsonData;return jsonData;
}QByteArray Baiduocrlib::get_ocr_data_by_pdf(const QString& access_token,const QString& pdf_base64_content){qDebug() << __LINE__ << __FUNCTION__;//QString urlstr=QString("https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=%1").arg(access_token);//标准含位置版本QString urlstr=QString("https://aip.baidubce.com/rest/2.0/ocr/v1/accurate?access_token=%1").arg(access_token);//高精度含位置版本QUrl url(urlstr);QNetworkRequest request(url);request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");request.setRawHeader("Accept", "application/json");// 创建 POST 数据QUrlQuery postData;postData.addQueryItem("pdf_file", pdf_base64_content);postData.addQueryItem("detect_direction", "false");postData.addQueryItem("paragraph", "false");postData.addQueryItem("probability", "false");postData.addQueryItem("multidirectional_recognize", "false");//发送Post包(通过阻塞方式获取返回结果)QByteArray jsonData=block_post_data(request,postData);//qDebug() << __LINE__ <<"jsonData:" << jsonData;return jsonData;
}int Baiduocrlib::get_pdf_urlcontent(const QString& pdfFilePath,QString& urlEncodedString){// 读取 PDF 文件QFile file(pdfFilePath);if (!file.open(QIODevice::ReadOnly)) {qDebug() << "无法打开文件:" << pdfFilePath;return -1;}QByteArray pdfData = file.readAll();file.close();// Base64 编码QByteArray base64Encoded = pdfData.toBase64();// URL 编码urlEncodedString = QUrl::toPercentEncoding(base64Encoded);return 0;
}int Baiduocrlib::get_img_urlcontent(const QString& imagePath,QString& urlEncodedString){// 加载图片QImage image(imagePath);if (image.isNull()) {qDebug() << "无法加载图片:" << imagePath;return -1;}// 将图片保存到QByteArray中QByteArray byteArray;QBuffer buffer(&byteArray);buffer.open(QIODevice::WriteOnly);// 将图片保存为PNG格式,你也可以选择其他格式如JPEGif (!image.save(&buffer, "PNG")) {qDebug() << "无法将图片保存到缓冲区";return -1;}buffer.close();// 将二进制数据转换为Base64编码QByteArray base64Data = byteArray.toBase64();// 转换为QStringQString base64String = QString::fromLatin1(base64Data);// URL编码urlEncodedString = QUrl::toPercentEncoding(base64String);qDebug() << __LINE__ << urlEncodedString.size();return 0;
}

1.4生成的动态库

以上内容进行构建之后,在dll目录下将会看到两个文件Baiduocrlib.dll和libBaiduocrlib.a

主要是使用xxx.dll文件,引用前最好把头文件也放在同一个目录下(别的项目引用此动态库时,需要引用到这个头文件)。

2、动态库引入

上面生成了两个文件:dll和.a(mingw32编译器生成的动态库),其他项目引入时,只需要其中一个动态库文件

1、在.pro文件中加入以下示例内容

#创建lib目录,把commdll.dll文件和commdll.h文件放到lib目录下HEADERS += \lib/commdll.h \            #增加头文件,通过头文件来引用mainwindow.h
LIBS +=-L$$PWD/lib -lcommdll   # $$PWD表示当前路径

然后在mainwindow.h文件中加入#include "lib/commdll.h"即可,调用时,按照常规类的方式来调用,可以理解为dll文件封装了自定义类。

Linux

1、动态库打包

linux下Qtcreator生成动态库的操作方法与window是一样的,区别是Linux下生成的是so文件

2、动态库引入

除了window中直接修改.pro文件,也可以在qtcreator中添加库,如下所示:

2.1右键点击左上角的项目,选中右键菜单【添加库】

2.2 选中【外部库】,点击下一步

2.3

2.3 选择library type类型为【Linux(lib*.so,lib*.a)】,选择库文件和路径,点击下一步

2.4点击完成即可

在pro文件中,可看到如下信息,还缺动态库的头文件,在HEADERS中加上动态库的头文件即可

结尾

        QT打包的动态库SO包,后台g++编译的程序不一定能调用,受g++版本,以及QT的依赖库等因素的影响。如果一个SO包既要同时支持g++编译的程序和QT程序调用,可以用传统C/C++的打包方式【Linux C/C++开发】编译及引用so动态库。

http://www.dtcms.com/wzjs/286134.html

相关文章:

  • 东台建设局官方网站淘宝排名查询工具
  • 免费做优化的网站建设太原seo优化
  • 做外贸是什么网站seo案例分享
  • 建设网银登录官方网站查询网址域名ip地址
  • 儋州网站建设网络策划书范文
  • 旅游电子商务网站开发搜索引擎优化是做什么的
  • 企业网站服务器的选择网络服务器地址怎么查
  • 做视频网站程序多少钱不受限制的万能浏览器
  • 网站设计hb软件网络营销的优势包括
  • 论坛网站备案流程图网络营销网站建设
  • 有什么做户外活动的网站吗长沙seo霜天
  • 网站如何更新维护神马网站快速排名软件
  • 安平网站建设培训2023广州疫情最新消息今天
  • 东莞网站建设页面设计有什么平台可以发广告
  • 做网站的是哪类公司市场营销毕业后找什么工作
  • 网站开发需求网百度推广上班怎么样
  • 学会计算机编程可以做网站吗深圳防疫措施优化
  • 南宁做网站推广外贸网站建设流程
  • 医院手机网站源码广告营销策略有哪些
  • 大型网站技术架构:核心原理与案例分析网络营销软文案例
  • 查看网站是否做百度推广小红书怎么推广引流
  • 建设网上购物网站百度开户推广多少钱
  • 哪个网站做电子请帖好章鱼磁力链接引擎
  • 物流公司创建百色seo关键词优化公司
  • Adobe Muse 商业网站爆款引流推广软件
  • 新闻门户网站psd模板推广优化关键词
  • 专业做网站产品上架的有吗百度移动端点赞排名软件
  • 手机端网站建设下载一个百度时事新闻
  • 北京网站建设汉邦国内外十大免费crm软件推荐
  • 品牌微信网站建设最近的疫情情况最新消息