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词典搜索的更多相关文章

  1. [Qt] searchBox 搜索框实现

    [Qt] searchBox 搜索框实现 也就是在lineEdit中加入button.在搜索框的右边会有个小小的搜索图标,输入内容之后,搜索的图标会变成叉叉. 类中的IconHelper见我的另一篇博 ...

  2. 百度词典搜索_dress code

    百度词典搜索_dress code dress code n.着装标准

  3. Qt 自动搜索串口号列表

    @功能: SerialPortList 类实现当前可用的串口进行实时扫描,当发现有新的串口 或是现有串口消失时,SerialPortList类将发出一个QStringList类型的 信号onNewSe ...

  4. Qt 文件搜索(写入文本文件)

    代码无意间在网上找到,下载回来后改了几个格式,编译后经测试可以正常使用,这个个文件搜索的很好的例子,有两种搜索方式:一种是按文件名作为关键字进行搜索,一种是以文档中所包含的关键字进行搜索,贴两张图先: ...

  5. 【Qt程序】基于Qt词典开发系列&lt;十二&gt;呼叫讲述

    我们知道,win7系统自带有讲述人,即能够机器读出当前内容,详细能够将电脑锁定.然后点击左下角的button就可以.之前在用Matlab写扫雷游戏的时候,也以前调用过讲述人来进行游戏的语音提示. 详细 ...

  6. qt tablewidget搜索效果如下

    from PyQt4.QtCore import *from PyQt4.QtGui import *from PyQt4.Qt import *import sysfrom aa1 import U ...

  7. QT静态链接

    想把QT的程序链接成一个独立的EXE以方便使用,查了很多资料都需要自行编译QT. 搜索了很多的资料,发篇写得比较简明一些:http://my.oschina.net/weiweiqiao/blog/2 ...

  8. qt的安装及连接sql使用注意

    qt安装与使用 今天写下qt使用的注意事项,qt-project.org上已经更新了qt5的相关库,但是建议不是很熟系qt的朋友,或者说想使用传统qt api而不是qml的朋友, 继续下载老版本4.8 ...

  9. 趣味网站5个,小鸡词典/中国配色/名著地图/海洋之音/LOGO设计

    一.小鸡词典 很多流行的词语还没有收录到各大词典,却可以在小鸡词典搜索到,小鸡词典是最全的网络流行词语词典. 不少词条搞笑无厘头,撰写词条还会获得红包. 访问地址:https://jikipedia. ...

随机推荐

  1. SQl server 2012安装问题 error code 0x858C001b 解决方法

    英文版系统安装中文版sql server的缘故,改安装英文版即可.

  2. java基础之集合框架(1)

    一.介绍Collection 1.概念:Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection ...

  3. Struts2框架05 result标签的类型

    1 result标签是干什么的 就是结果,服务器处理完返回给浏览器的结果:是一个输出结果数据的组件 2 什么时候需要指定result标签的类型 把要输出的结果数据按照我们指定的数据类型进行处理 3 常 ...

  4. 从零Wordpress建站经验分享,内附耗时间及成本

    5月末回国,工作进入空档期. 每天上班没有任务压身,日子过得反而更加难熬. 一直自己做一个网站,却总下不定决心,总是懒得迈出第一步. 正巧朋友需要建设一个宣传用网站. 外面的公司给他报价很高. 反正我 ...

  5. [Oracle]高水位标记(HWM)

    (一)高水位标记(High Water Mark,HWM)的概念 所谓高水位标记,是指一个已经分配的段中,已经使用的空间与未使用的空间的分界线.在表的使用过程中,随着数据的不断增多(insert),H ...

  6. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  7. git的一些基本命令

    1.创建一个新的仓库:(选择一个合适的地方,创建一个空目录) $mkdir learngit //learngit是用git新建的一个目录 $cd learngit $pwd //pwd命令用于显示当 ...

  8. redhat mysql安装配置

    1.    下载好编译包, 解压到/usr/local/ 并修改文件夹名字为mysql tar -zxf mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz -C /u ...

  9. 【HTML】dl dt dd

    摘要 看到没怎么使用过的html 标签,记录下 定义 dl 类似于 ul ,无任何样式,自定义列表容器, ul 为无序列表容器,ol 为有序列表容器 dt dd 类似于 li ,无任何样式,为帮助实现 ...

  10. Postgres by BigSQL and Hadoop_fdw

    Postgres by BigSQL and hadoop_fdw 测试Postgresql和远程Hive的Join操作. 测试环境 Centos6.8 HDP2.4集群,其中Hive Server2 ...