Qt词典搜索
Qt词典搜索
采用阿凡达数据-API数据接口及爱词霸API数据接口实现词典搜索功能,实例字符串搜索接口分别为:中文词组采用“词典”,中文单个字采用“中华字典”,英文或其他字符采用“爱词霸”;
对应的API接口:
http://api.avatardata.cn/CiHai/LookUp?key=[申请的APPKEY]&keyword=[搜索内容]
http://api.avatardata.cn/XinHuaZiDian/LookUp?key=[申请的APPKEY]&content=[搜索内容]
http://dict-co.iciba.com/api/dictionary.php?key=[申请的APPKEY]&w=[搜索内容]
1.字符串搜索分类
- void DictLookUpKeyRequest(const QString &strSearchKey)
- {
- QString strDictLookupKey = strSearchKey.trimmed();
- if (strDictLookupKey.isEmpty())
- {
- emit DictLookUpKeyFinished(false, "---INVALID_URL---");
- return;
- }
- QString strLookUpUrl = "";
- if (strDictLookupKey.contains(QRegExp("[\\x4e00-\\x9fa5]")))
- {
- //search key contains Chinese character
- if (strDictLookupKey.contains(QRegExp("[A-Za-z0-9]")))
- {
- emit DictLookUpKeyFinished(false, "---NO_SUPPORT---");
- return;
- }
- if (strDictLookupKey.size() >= )
- {
- strLookUpUrl = QString("http://api.avatardata.cn/CiHai/LookUp?key=d19e2a742a7b467c83a63bdd263b371b&keyword=%1").arg(strSearchKey);
- }
- else
- {
- strLookUpUrl = QString("http://api.avatardata.cn/XinHuaZiDian/LookUp?key=175dcbe2c06e49db9eef7f76045ddb55&content=%1").arg(strSearchKey);
- }
- }
- else
- {
- //search other key
- strLookUpUrl = QString("http://dict-co.iciba.com/api/dictionary.php?key=B602AC1E01426961CADF60B71CA97484&w=%1").arg(strSearchKey);
- }
- HttpDictLookUpRequest(strLookUpUrl); //QNetworkRequest
- }
2.QNetworkRequest搜索网络请求
- void HttpDictLookUpRequest(const QUrl& url)
- {
- QNetworkReply *reply = mpManager->get(QNetworkRequest(url));
- connect(reply, &QNetworkReply::finished, this, [this]()
- {
- QNetworkReply* reply = static_cast<QNetworkReply*>(sender());
- reply->deleteLater();
- if (reply->error())
- {
- emit HttpGetRequestFinished(false, "");
- }
- else
- {
- emit HttpGetRequestFinished(true, reply->readAll());
- }
- });
- }
3.搜索返回数据处理
- void OnDictLookUpResult(bool bFinsihed, const QString& DictLookUpKeyReplyStr)
- {
- QString strTextResult = QString("< font color=#6e6e6e >%1</font>").arg(tr("The query word is not entered in the dictionary, please try again later"));
- if (bFinsihed)
- {
- if (DictLookUpKeyReplyStr.contains("</dict>"))
- {
- //iciba search result
- if (!DictLookUpKeyReplyStr.contains("<acceptation>"))
- {
- mpTextEdit->setText(strTextResult);
- return;
- }
- QXmlStreamReader reader(DictLookUpKeyReplyStr);
- while (!reader.atEnd())
- {
- reader.readNext();
- if (reader.isStartElement())
- {
- if (reader.name().contains("key"))
- {
- strTextResult = "";
- strTextResult.append(QString("< font color=#4a4a4a ><b>%1</b></font>").arg(reader.readElementText()));
- }
- else if (reader.name().contains("pos") || reader.name().contains("acceptation"))
- {
- strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(reader.readElementText()));
- }
- }
- }
- }
- else
- {
- QJsonParseError jsonParseError;
- QJsonDocument jsonDocument = QJsonDocument::fromJson(DictLookUpKeyReplyStr.toUtf8(), &jsonParseError);
- if (jsonParseError.error == QJsonParseError::NoError)
- {
- QJsonObject jsonObj = jsonDocument.object();
- int returnValue = jsonObj.value("return_code").toInt();
- if (returnValue == )
- {
- QJsonObject resultJsonObj = jsonObj.value("result").toObject();
- if (!resultJsonObj.value("words").toString().isEmpty())
- {
- //CiHai search result
- strTextResult = QString("< font color=#4a4a4a ><b>%1</b></font>").arg(resultJsonObj.value("words").toString());
- strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(resultJsonObj.value("content").toString()));
- }
- else
- {
- //XinHuaZiDian search result
- QJsonArray resultArray = jsonObj.value("result").toArray();
- if (resultArray.size() > )
- {
- QJsonObject resultArrayJsonObj = resultArray.at().toObject();
- strTextResult = QString("< font color=#4a4a4a ><b>%1</b></font>").arg(resultArrayJsonObj.value("hanzi").toString());
- if (!resultArrayJsonObj.value("jianjie").toString().isEmpty())
- {
- strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(resultArrayJsonObj.value("jianjie").toString()));
- }
- if (!resultArrayJsonObj.value("xiangjie").toString().isEmpty())
- {
- strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(resultArrayJsonObj.value("xiangjie").toString()));
- }
- }
- }
- }
- }
- }
- }
- mpTextEdit->setText(strTextResult);
- }
Qt词典搜索的更多相关文章
- [Qt] searchBox 搜索框实现
[Qt] searchBox 搜索框实现 也就是在lineEdit中加入button.在搜索框的右边会有个小小的搜索图标,输入内容之后,搜索的图标会变成叉叉. 类中的IconHelper见我的另一篇博 ...
- 百度词典搜索_dress code
百度词典搜索_dress code dress code n.着装标准
- Qt 自动搜索串口号列表
@功能: SerialPortList 类实现当前可用的串口进行实时扫描,当发现有新的串口 或是现有串口消失时,SerialPortList类将发出一个QStringList类型的 信号onNewSe ...
- Qt 文件搜索(写入文本文件)
代码无意间在网上找到,下载回来后改了几个格式,编译后经测试可以正常使用,这个个文件搜索的很好的例子,有两种搜索方式:一种是按文件名作为关键字进行搜索,一种是以文档中所包含的关键字进行搜索,贴两张图先: ...
- 【Qt程序】基于Qt词典开发系列<十二>呼叫讲述
我们知道,win7系统自带有讲述人,即能够机器读出当前内容,详细能够将电脑锁定.然后点击左下角的button就可以.之前在用Matlab写扫雷游戏的时候,也以前调用过讲述人来进行游戏的语音提示. 详细 ...
- qt tablewidget搜索效果如下
from PyQt4.QtCore import *from PyQt4.QtGui import *from PyQt4.Qt import *import sysfrom aa1 import U ...
- QT静态链接
想把QT的程序链接成一个独立的EXE以方便使用,查了很多资料都需要自行编译QT. 搜索了很多的资料,发篇写得比较简明一些:http://my.oschina.net/weiweiqiao/blog/2 ...
- qt的安装及连接sql使用注意
qt安装与使用 今天写下qt使用的注意事项,qt-project.org上已经更新了qt5的相关库,但是建议不是很熟系qt的朋友,或者说想使用传统qt api而不是qml的朋友, 继续下载老版本4.8 ...
- 趣味网站5个,小鸡词典/中国配色/名著地图/海洋之音/LOGO设计
一.小鸡词典 很多流行的词语还没有收录到各大词典,却可以在小鸡词典搜索到,小鸡词典是最全的网络流行词语词典. 不少词条搞笑无厘头,撰写词条还会获得红包. 访问地址:https://jikipedia. ...
随机推荐
- 第一章:pip 安装 tar.gz 结尾的文件 和 .whl 结尾的文件
1. 假如后缀中还有 .tar.gz 的文件通过 pip 命令进行安装步骤. .单击 .tar.gz结尾的文件,并且对文件进行解压,进入到解压目录中,通过python命令进行安装. 命令如下:在dos ...
- JSON.parse()与JSON.stringify()的区别
JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name":"goatling"}' //解析 ...
- Selenium的简单安装和使用
Selenium的安装 pip install selenium Selenium模块需要调用浏览器,需要配置selenium的浏览器驱动 Firefox(火狐) 下载对应版本的geckdriver. ...
- 使用cxf做webservice接口调用
一.服务端 建javaweb工程,去官网下载所需的cxf接口发布的jar包,导入到工程.官网地址:http://cxf.apache.org/download.html 1.建立调用接口 packag ...
- C#.NET 中visual studio生成的.pdb/ .vshost.exe/ .vshost.exe.manifest文件是什么
pdb文件: 英文全称:Program Database File 中文全称:程序数据库 文件 Debug里的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码.可以对程序的调试配 ...
- java窗口按钮设置五个方向
java窗口按钮设置五个方向 代码如下: package Day08; import java.awt.BorderLayout;import javax.swing.JButton;import j ...
- hdu_1711: Number Sequence【KMP算法】
题目链接 此次插播点笔记 hdu中点击蓝色的"Compilation Error"可以查看自己是为什么CE的 hdu中提交的话,语言选择G++可以使用<bits/stdc++ ...
- (转)上传jar包到nexus私服
场景:在使用私服Nexus时候经常需要上传jar包,但是对上传jar包的方式不是很熟悉,所以很有必要学习下. 1 通过网页上传 GAV Definition:选择GAV Parameters 输入JA ...
- App 组件化/模块化之路——Repository 模式
什么是 Repository 模式 Repository 这个词直译过来仓库.仓储的意思.这个意思其实也能反应出 Repository 模式作用.App 开发中少不了对数据的操作,数据的来源可能有很多 ...
- 【JS】cookies 的使用
摘要 cookies 的限制 IE6~IE6以下,每个域名最多20个cookie IE7及以上,每个域名最多50个cookie Firefox,每个域名最多50个cookie Opera,每个域名最多 ...