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

网站开发技术 文库绍兴seo推广

网站开发技术 文库,绍兴seo推广,免费企业邮箱哪家好,dw入门基础教程前言 本篇为持续更新状态,内容包含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/416710.html

相关文章:

  • 明水县网站建设佛山快速排名seo
  • 上海中学官网电脑版做网站优化推广
  • 微信 小程序 wordpress优化站点
  • 做招聘网站公司北京网站营销seo方案
  • 网站设计公司 中山一个产品的市场营销策划方案
  • 开展网站建设性价比高seo排名
  • 免费加速器看国外网站免费引流推广怎么做
  • php mysql 网站源码seo优化信
  • 北京网站建设的服务商品牌咨询
  • 成都装饰网站建设免费建一个自己的网站
  • 个人做收费网站外贸网站都有哪些
  • 西安网站制作开发网站关键词百度自然排名优化
  • 国内外贸免费网站建设百度网盘客服24小时电话人工服务
  • 微信模板图片福州seo代理商
  • 长春网站上排名电脑培训学校哪家最好
  • 如何做自适应网站网站推广渠道
  • 软件技术专升本考什么科目百度爱采购优化排名软件
  • 有人从搜索引擎找网站建设吗网站建设培训
  • 优秀的浏览器主页北京seo顾问推推蛙
  • 电子商务怎样建立网站的百度seo发帖推广
  • 毕业设计做网站答辩会问什么佛山网站建设
  • 3g手机网站建设竞价推广专员
  • 网站建设从入门到精通 网盘太原自动seo
  • 天津市政府网站建设管理东莞免费网站建设网络营销
  • 正定网站制作企业推广策划公司
  • 黑龙江省建设教育信息网站宁波seo网络推广外包报价
  • 电子政务网站建设公司排行榜最近比较火的关键词
  • 网站建设功能文档廊坊网站推广公司
  • 做网站哪种编程语言最好怎么建立网站
  • 房产门户网站平台搭建网站seo优化价格