Qt 词典开发记录

由于有道词典Linux版使用python开发,python的启动速度没有达到秒启,所以想使用C++、图形库Deepin tool kit(基于Qt)写一款词典,能够查询单词释义、发音、翻译,如今项目已经有了90+的commit,想写一篇文章记录下。

API选择

刚开始用的是扇贝词典的API,由于扇贝词典的API功能不强大,释义少,不能查询句子或翻译一大段文字,最后放弃了扇贝词典,转向了有道词典API。

API解析

Qt提供了QJsonDocument、QJsonObject相关的JSON解析类,非常方便,因此不需要自己来写解析类了。

第一版

第一版的时候很简单,用的还是扇贝词典的API,扇贝API不能翻译句子,转到查询页的时候不能返回首页,首页的数据是获取金山的API。

Qt 词典开发记录_第1张图片
首页
Qt 词典开发记录_第2张图片
查询

第二版

第二版界面优化多处,直接上有道的API了,不仅释义比扇贝词典多,还可以翻译句子。

Qt 词典开发记录_第3张图片
释义

Qt 词典开发记录_第4张图片
还可以翻译句子

第三版

第三版主要对代码优化,界面的调整,比如将“返回主页”的按钮移动到顶栏,很符合deepin的风格。

Qt 词典开发记录_第5张图片
返回

现在的版本

标签栏采用了类似深度终端2.0的设计,加入的翻译页面。

Qt 词典开发记录_第6张图片
深度录屏_选择区域_20170713173211.gif

网络请求

使用 QNetworkAccessManager 类允许应用程序发送网络请求和接受回复。

创建 QNetworkAccessManager
QNetworkAccessManager *http = new QNetworkAccessManager;

访问有道API

QNetworkRequest request;
request.setUrl(QUrl("http://fanyi.youdao.com/openapi.do?keyfrom=YouDaoCV&key=659600698&type=data&doctype=json&version=1.1&only=translate&q=" + word));
http->get(request);
connect(http, QNetworkAccessManager::finished, this, &YoudaoAPI::reply);

JSON解析

void YoudaoAPI::reply(QNetworkReply *reply)
{
  QByteArray data = reply->readAll();
  QJsonDocument json = QJsonDocument::fromJson(data);
}

项目地址:https://github.com/rekols/redict

你可能感兴趣的:(Qt 词典开发记录)