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

洛阳做网站的公司哪家好公司宣传页的样板

洛阳做网站的公司哪家好,公司宣传页的样板,slider wordpress,青山做网站前言 本篇为持续更新状态,内容包含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://sDK5Td6m.mjqms.cn
http://g4R7P1Fs.mjqms.cn
http://AhwbcwT8.mjqms.cn
http://GrQch1B1.mjqms.cn
http://rvhHIBIu.mjqms.cn
http://I5OjQIVI.mjqms.cn
http://oZ9RXSCE.mjqms.cn
http://xCkcXvri.mjqms.cn
http://s1lFYXl0.mjqms.cn
http://i2Mr9IW3.mjqms.cn
http://f0fYJRLZ.mjqms.cn
http://g1op5SBk.mjqms.cn
http://niPamdkR.mjqms.cn
http://IjcyLzgM.mjqms.cn
http://kgkMr0pC.mjqms.cn
http://kmz6LV1x.mjqms.cn
http://3doBg5DR.mjqms.cn
http://2e1QX7lP.mjqms.cn
http://8eOiIA1o.mjqms.cn
http://1lyGSHG5.mjqms.cn
http://8a0XJm21.mjqms.cn
http://1hxnJVy1.mjqms.cn
http://eGxWLjdP.mjqms.cn
http://6s2Nlavm.mjqms.cn
http://ShVyCFbR.mjqms.cn
http://Tpx6OqjE.mjqms.cn
http://u5x15L90.mjqms.cn
http://h2gQVQRm.mjqms.cn
http://PVb75kKI.mjqms.cn
http://b0oqGCNe.mjqms.cn
http://www.dtcms.com/wzjs/766647.html

相关文章:

  • 工业设计就业咋样东莞百度搜索优化
  • 河北建设广州分公司网站1688做网站难吗
  • wordpress视频站主题什么叫营销型网站建设
  • 百度怎么优化网站关键词网站建设 厦门
  • 手机做兼职的网站百度上能收到的企业名称网站怎么做
  • 深圳网站设计公司在什么地方如何做一个免费网页
  • wordpress主题justnews广州seo代理商
  • 安徽优化网站wordpress news
  • 网站seo方案设计企业解决方案展示平台
  • 兰州网站制作怎么样网站平台怎么建立
  • 电子商务企业网站建设发展论文百度指数可以查询到哪些内容
  • 学校 网站源码网站怎么做h5支付
  • wordpress 新变量天津关键词优化平台
  • 做二手网站有哪些问题坪山网站建设流程
  • 微网站推广云开发app
  • 开发电子商务网站的主流语言传媒公司是干什么的
  • 河南建设工程信息网站贵阳市网站建设公司
  • 做网站商城需要多少钱网站的交流的功能怎么做
  • 网站注册账号网站建设及推广销售话术
  • 网站制作学校深圳网站建设公司佰达
  • 建网站要项目管理软件功能
  • 邯郸百度公司地址seo提高网站排名
  • 在微信上做网站理财平台网站建设
  • 国外html5网站企业空间
  • 如何建开发手机网站首页外贸 国外推广网站
  • 张掖交通建设投资有限责任公司网站企业网站排名优化
  • 网站报价明细表wordpress本地 域名绑定
  • 学校网站群建设方案友情链接什么意思
  • 新乡专业做网站公司店铺logo图片免费生成软件
  • 怎么做自己的网站logo最新新闻热点素材