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.字符串搜索分类

  1. void DictLookUpKeyRequest(const QString &strSearchKey)
  2. {
  3. QString strDictLookupKey = strSearchKey.trimmed();
  4. if (strDictLookupKey.isEmpty())
  5. {
  6. emit DictLookUpKeyFinished(false, "---INVALID_URL---");
  7. return;
  8. }
  9.  
  10. QString strLookUpUrl = "";
  11. if (strDictLookupKey.contains(QRegExp("[\\x4e00-\\x9fa5]")))
  12. {
  13. //search key contains Chinese character
  14. if (strDictLookupKey.contains(QRegExp("[A-Za-z0-9]")))
  15. {
  16. emit DictLookUpKeyFinished(false, "---NO_SUPPORT---");
  17. return;
  18. }
  19.  
  20. if (strDictLookupKey.size() >= )
  21. {
  22. strLookUpUrl = QString("http://api.avatardata.cn/CiHai/LookUp?key=d19e2a742a7b467c83a63bdd263b371b&keyword=%1").arg(strSearchKey);
  23. }
  24. else
  25. {
  26. strLookUpUrl = QString("http://api.avatardata.cn/XinHuaZiDian/LookUp?key=175dcbe2c06e49db9eef7f76045ddb55&content=%1").arg(strSearchKey);
  27. }
  28. }
  29. else
  30. {
  31. //search other key
  32. strLookUpUrl = QString("http://dict-co.iciba.com/api/dictionary.php?key=B602AC1E01426961CADF60B71CA97484&w=%1").arg(strSearchKey);
  33. }
  34.  
  35. HttpDictLookUpRequest(strLookUpUrl); //QNetworkRequest
  36. }

2.QNetworkRequest搜索网络请求

  1. void HttpDictLookUpRequest(const QUrl& url)
  2. {
  3. QNetworkReply *reply = mpManager->get(QNetworkRequest(url));
  4.  
  5. connect(reply, &QNetworkReply::finished, this, [this]()
  6. {
  7. QNetworkReply* reply = static_cast<QNetworkReply*>(sender());
  8. reply->deleteLater();
  9.  
  10. if (reply->error())
  11. {
  12. emit HttpGetRequestFinished(false, "");
  13. }
  14. else
  15. {
  16. emit HttpGetRequestFinished(true, reply->readAll());
  17. }
  18. });
  19. }

3.搜索返回数据处理

  1. void OnDictLookUpResult(bool bFinsihed, const QString& DictLookUpKeyReplyStr)
  2. {
  3. QString strTextResult = QString("< font color=#6e6e6e >%1</font>").arg(tr("The query word is not entered in the dictionary, please try again later"));
  4. if (bFinsihed)
  5. {
  6. if (DictLookUpKeyReplyStr.contains("</dict>"))
  7. {
  8. //iciba search result
  9. if (!DictLookUpKeyReplyStr.contains("<acceptation>"))
  10. {
  11. mpTextEdit->setText(strTextResult);
  12. return;
  13. }
  14.  
  15. QXmlStreamReader reader(DictLookUpKeyReplyStr);
  16. while (!reader.atEnd())
  17. {
  18. reader.readNext();
  19. if (reader.isStartElement())
  20. {
  21. if (reader.name().contains("key"))
  22. {
  23. strTextResult = "";
  24. strTextResult.append(QString("< font color=#4a4a4a ><b>%1</b></font>").arg(reader.readElementText()));
  25. }
  26. else if (reader.name().contains("pos") || reader.name().contains("acceptation"))
  27. {
  28. strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(reader.readElementText()));
  29. }
  30. }
  31. }
  32. }
  33. else
  34. {
  35. QJsonParseError jsonParseError;
  36. QJsonDocument jsonDocument = QJsonDocument::fromJson(DictLookUpKeyReplyStr.toUtf8(), &jsonParseError);
  37. if (jsonParseError.error == QJsonParseError::NoError)
  38. {
  39. QJsonObject jsonObj = jsonDocument.object();
  40. int returnValue = jsonObj.value("return_code").toInt();
  41. if (returnValue == )
  42. {
  43. QJsonObject resultJsonObj = jsonObj.value("result").toObject();
  44. if (!resultJsonObj.value("words").toString().isEmpty())
  45. {
  46. //CiHai search result
  47. strTextResult = QString("< font color=#4a4a4a ><b>%1</b></font>").arg(resultJsonObj.value("words").toString());
  48. strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(resultJsonObj.value("content").toString()));
  49.  
  50. }
  51. else
  52. {
  53. //XinHuaZiDian search result
  54. QJsonArray resultArray = jsonObj.value("result").toArray();
  55. if (resultArray.size() > )
  56. {
  57. QJsonObject resultArrayJsonObj = resultArray.at().toObject();
  58. strTextResult = QString("< font color=#4a4a4a ><b>%1</b></font>").arg(resultArrayJsonObj.value("hanzi").toString());
  59. if (!resultArrayJsonObj.value("jianjie").toString().isEmpty())
  60. {
  61. strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(resultArrayJsonObj.value("jianjie").toString()));
  62. }
  63. if (!resultArrayJsonObj.value("xiangjie").toString().isEmpty())
  64. {
  65. strTextResult.append(QString("< font color=#6e6e6e ><br>%1</font>").arg(resultArrayJsonObj.value("xiangjie").toString()));
  66. }
  67. }
  68. }
  69. }
  70. }
  71.  
  72. }
  73. }
  74.  
  75. mpTextEdit->setText(strTextResult);
  76. }

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. 第一章:pip 安装 tar.gz 结尾的文件 和 .whl 结尾的文件

    1. 假如后缀中还有 .tar.gz 的文件通过 pip 命令进行安装步骤. .单击 .tar.gz结尾的文件,并且对文件进行解压,进入到解压目录中,通过python命令进行安装. 命令如下:在dos ...

  2. JSON.parse()与JSON.stringify()的区别

    JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name":"goatling"}' //解析 ...

  3. Selenium的简单安装和使用

    Selenium的安装 pip install selenium Selenium模块需要调用浏览器,需要配置selenium的浏览器驱动 Firefox(火狐) 下载对应版本的geckdriver. ...

  4. 使用cxf做webservice接口调用

    一.服务端 建javaweb工程,去官网下载所需的cxf接口发布的jar包,导入到工程.官网地址:http://cxf.apache.org/download.html 1.建立调用接口 packag ...

  5. C#.NET 中visual studio生成的.pdb/ .vshost.exe/ .vshost.exe.manifest文件是什么

      pdb文件: 英文全称:Program Database File 中文全称:程序数据库 文件 Debug里的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码.可以对程序的调试配 ...

  6. java窗口按钮设置五个方向

    java窗口按钮设置五个方向 代码如下: package Day08; import java.awt.BorderLayout;import javax.swing.JButton;import j ...

  7. hdu_1711: Number Sequence【KMP算法】

    题目链接 此次插播点笔记 hdu中点击蓝色的"Compilation Error"可以查看自己是为什么CE的 hdu中提交的话,语言选择G++可以使用<bits/stdc++ ...

  8. (转)上传jar包到nexus私服

    场景:在使用私服Nexus时候经常需要上传jar包,但是对上传jar包的方式不是很熟悉,所以很有必要学习下. 1 通过网页上传 GAV Definition:选择GAV Parameters 输入JA ...

  9. App 组件化/模块化之路——Repository 模式

    什么是 Repository 模式 Repository 这个词直译过来仓库.仓储的意思.这个意思其实也能反应出 Repository 模式作用.App 开发中少不了对数据的操作,数据的来源可能有很多 ...

  10. 【JS】cookies 的使用

    摘要 cookies 的限制 IE6~IE6以下,每个域名最多20个cookie IE7及以上,每个域名最多50个cookie Firefox,每个域名最多50个cookie Opera,每个域名最多 ...