版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
目录
基本概念
这里就是百度搜索的这个功能
在Web应用中,这种主要是通过jsonp原理实现的,但在桌面应用程序就更简单了,只要发送get请求,不填写回调函数,即可在http封包中获取数据。如下:
在桌面应用程序这个请求更为简单,因为只需要发送http请求,无需http安全,以及某些浏览器自己的安全协定。
扫描二维码关注公众号,回复:
7594407 查看本文章
代码与实例
运行截图如下如搜索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