博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
淘宝获取下拉提示栏
阅读量:4346 次
发布时间:2019-06-07

本文共 2437 字,大约阅读时间需要 8 分钟。

2014年8月10日 22:01:
目标:获取淘宝网首页搜索框输入一个词后的下拉提示内容
实现:淘宝网的接口
     QNetworkAccessManager QnetworkRequest QNetworkReply的使用
     Json的处理(淘宝网返回的数据为JSON(似乎为非标准JSON类,但经过简单处理即可)),嵌套JSON的处理.
    
 Qt中QLineEdit 以及QTextEdit的使用,信号与糟。
    
 Qt应用程序打包
开发环境:windows8.1 Qt5.1.0
(原先是使用Qt5.2开发,但是运行到QNetworkAccessManager调用get函数时出现
QSslSocket: cannot resolve TLSv1_2_client_method site:qt-project.org错误,万般百度Google无果后,尝试了下5.1,竟然就不报错了)
    关于JSON:JSON分两类,一类为array(即为数组类),一类为object类(可以理解为字典,map,通过取前面的元素获取对应的元素)
    关于代码:因淘宝返回的值格式固定,所以我也就没有用到异常处理,这个程序也只是练练手,进一步熟悉Qt的使用,以及Qt网络处理,JSON。
    
界面图:
   
132138264529457.png
以下是部分代码及注释:
//此为按钮clicked后触发的槽事件
 
  1. void MainWindow::on_pushButton_clicked()    
  2. {
  3.     QUrl url = "http://suggest.taobao.com/sug?extras=1&code=utf-8&callback=KISSY.Suggest.callback&q="
  4.             + ui->lineEdit->text();
  5.     QNetworkRequest request(url);
  6.     QNetworkReply *reply = manager->get(request);          //Qt5.2运行时报错的步骤即为此行
  7.     QEventLoop eventLoop;                    //线程阻塞直至manager接收完毕
  8.         QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
  9.         eventLoop.exec();       //block until finish
  10.  
  11.         QTextCodec *codec = QTextCodec::codecForName("utf8");
  12.         //输出
  13.         QString all = codec->toUnicode(reply->readAll());
  14.         QString str = "KISSY.Suggest.callback(";     //经在线JSON网站测验,返回的并非标准JSON类,故需进一步处理
  15.         all.remove(0, str.length());
  16.         all.replace(QString(")"), QString(""));
  17.         QJsonParseError error;
  18.         QJsonDocument json = QJsonDocument::fromJson(all.toUtf8(), &error);
  19.         if (error.error == QJsonParseError::NoError) {
  20.             if (!(json.isNull() || json.isEmpty())) {
     //内容为空或者数据为空
  21.                 if (json.isObject()) {
            //object类
  22.                    QJsonObject object = json.object();
  23.                    QJsonValue value = object.take("result");      //通过take获取对应的QJsonValue
  24.                    QJsonArray subarray = value.toArray();
  25.                    int subsize = subarray.size();
  26.                    //ui->textEdit->append(QString::number(subsize));
  27.                    for (int i = 0; i < subsize; i++) {
  28.                        QJsonValue subvalue = subarray.at(i);
  29.                        QJsonArray subtwo = subvalue.toArray();
  30.                        QJsonValue subtwovalue = subtwo.at(0);
  31.                        QString str = subtwovalue.toString();
  32.                        ui->textEdit->append(str);
  33.                    }}
  34.                 } else if (json.isArray()) {
  35.                     QJsonArray array = json.array();
  36.                     int size = array.size();
  37.                     QJsonValue value;
  38.                     for (int i = 0; i < size; i++) {
  39.                         value = array.at(i);
  40.                         QString name = value.toString();
  41.                         ui->textEdit->append(name);
  42.                     }
  43.                 }
  44. } else {
  45.             ui->textEdit->append("json failed");// 检查错误类型
  46.         }
  47.         //ui->textEdit->append(all);
  48. }
Qt应用程序打包:
用到的工具:
1.hap-depends213790   分析Qt程序缺少的dll文件
2.Enigma Virtual Box_7.10  打包应用程序,将需要的dll文件包含进EXE里
备注:Qt编译时选择release,需要的dll文件会小很多,debug版缺少的文件格式一般为*d.dll。

转载于:https://www.cnblogs.com/wilbertwu/p/3911230.html

你可能感兴趣的文章
实验三
查看>>
机器码和字节码
查看>>
环形菜单的实现
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>
STM32+IAP方案 实现网络升级应用固件
查看>>
用74HC165读8个按键状态
查看>>
jpg转bmp(使用libjpeg)
查看>>
linear-gradient常用实现效果
查看>>
sql语言的一大类 DML 数据的操纵语言
查看>>
VMware黑屏解决方法
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Thrift源码分析(二)-- 协议和编解码
查看>>
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
关于C++ const成员的一些细节
查看>>