zoukankan      html  css  js  c++  java
  • 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() >= 2)
            {
                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 == 0)
                    {
                        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() > 0)
                            {
                                QJsonObject resultArrayJsonObj = resultArray.at(0).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);
    }
  • 相关阅读:
    子查询
    视频工作工具链
    视频拆帧与组帧
    二叉树
    回溯法
    windows配置编译器
    C++工厂模式
    C++单例模式
    HTML学习记录
    C++代码规范
  • 原文地址:https://www.cnblogs.com/sz-leez/p/5910443.html
Copyright © 2011-2022 走看看