Qt笔记-Qt获取百度下拉推荐词

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq78442761/article/details/102073184

目录

 

基本概念

代码与实例


 

基本概念

这里就是百度搜索的这个功能

在Web应用中,这种主要是通过jsonp原理实现的,但在桌面应用程序就更简单了,只要发送get请求,不填写回调函数,即可在http封包中获取数据。如下:

在桌面应用程序这个请求更为简单,因为只需要发送http请求,无需http安全,以及某些浏览器自己的安全协定。

代码与实例

运行截图如下如搜索CSDN

再来一个:

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_USE_NAMESPACE
class QNetworkAccessManager;
QT_END_NAMESPACE

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

protected slots:
    void inputChanged(const QString &text);

protected:
    void resetListWidget(QStringList list);

private:
    Ui::Widget *ui;
    QNetworkAccessManager *m_manager;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QNetworkAccessManager>
#include <QJsonDocument>
#include <QMap>
#include <QVariant>
#include <QDebug>
#include <QEventLoop>
#include <QNetworkReply>
#include <QNetworkRequest>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowTitle("CSDN IT1995");
    m_manager = new QNetworkAccessManager(this);
    connect(ui->lineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(inputChanged(const QString&)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::inputChanged(const QString &text)
{
    QNetworkRequest request;
    request.setUrl("https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=1430,21123,29523,29721,29567,29220&req=2&csor=5&pwd=123&wd=" + text);
    QNetworkReply *reply = m_manager->get(request);
    QEventLoop loop;
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();

    QMap<QString, QVariant> map = QJsonDocument().fromJson(reply->readAll()).toVariant().toMap();
    //map = map.value("g").toMap();
    QList<QVariant> list = map.value("g").toList();
    QStringList widgetList;
    for(int i = 0; i < list.size(); i++){

        widgetList << list[i].toMap().value("q").toString();
    }

    resetListWidget(widgetList);
}

void Widget::resetListWidget(QStringList list)
{
    ui->listWidget->clear();
    ui->listWidget->addItems(list);
}

程序打包下载地址:

https://github.com/fengfanchen/Qt/tree/master/QtWebSearchKey

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/102073184