QT--图灵机器人

QT--图灵机器人

1.登陆图灵机器人官网注册一个图灵机器人

2.获取apikey

3.pro文件添加

QT       += core gui network

4.头文件

#include <QNetworkAccessManager>       //三个http必须头文件
#include <QNetworkReply>
#include <QNetworkRequest>

5.widget.h文件

#ifndef WIDGET_H
#define WIDGET_H
​
#include <QWidget>
​
#include <QNetworkAccessManager>       //三个http必须头文件
#include <QNetworkReply>
#include <QNetworkRequest>
​
​
namespace Ui {
class Widget;
}
​
class Widget : public QWidget
{
    Q_OBJECT
​
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
​
    QNetworkAccessManager *manager;
    QNetworkReply  *reply;
    QNetworkRequest *requst;
​
    QJsonObject *JsonData;      //封装的json信息
​
    QString getJson();          //解析返回的json信息
    void Json_data();           //封装json信息
private slots:
    void doProcessReadyRead();
    void on_pushButton_clicked();
    void doProceesFinished();
​
private:
    Ui::Widget *ui;
};
​
#endif // WIDGET_H

6.widget.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QFile>
#include <QPixmap>
#include <QJsonObject>    //json
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
​
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
​
    Json_data();
​
    manager = new QNetworkAccessManager(this);
    requst = new QNetworkRequest;
​
}
​
Widget::~Widget()
{
    delete ui;
}
​
​
/*     HTTP通信   */
void Widget::on_pushButton_clicked()
{
    requst->setUrl(QUrl("http://openapi.tuling123.com/openapi/api/v2"));              //填入图灵机器人接口地址
    requst->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");         //设置数据类型为json格式
​
    QJsonDocument document=QJsonDocument(*JsonData);                                  //将封装的json格式数据转为字节数组形式
    QByteArray array = document.toJson();
​
    reply = manager->post(*requst,array);                                             //以post方式发送请求
​
    connect(reply, &QIODevice::readyRead, this, &Widget::doProcessReadyRead);         //收到返回信息则发出可读信号
    connect(reply, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error), //出现异常
          [=](QNetworkReply::NetworkError code)
            {
                switch((int)code)
                {
                    case QNetworkReply::ConnectionRefusedError:
                        qDebug() << "远程服务器拒绝连接(服务器不接受请求)";
                        break;
                    case QNetworkReply::HostNotFoundError:
                        qDebug() << "找不到远程主机名(无效的主机名)";
                        break;
                    case QNetworkReply::TimeoutError:
                        qDebug() << "与远程服务器的连接超时";
                        break;
                    default:
                        break;
                }
            });
    connect(reply, &QNetworkReply::finished,this,&Widget::doProceesFinished);
​
}
​
​
/*     获取信息     */
void Widget::doProcessReadyRead()
{
   QString text = getJson();             //解析返回的json信息
   ui->textEdit->append(text);
   qDebug() << text;
}
​
​
​
/*  封装要发送的json格式信息   */
void Widget::Json_data()
{
    QJsonObject provideInfo;
    QJsonObject Text;
    QJsonObject Image;
    QJsonObject Info;
    QJsonObject UserLocation;
​
    QString data = ui->lineEdit->text();         //输入发送的信息
    Text.insert("text",data);
​
    UserLocation.insert("city","成都");           //后面这一块不必须
    UserLocation.insert("province","四川");
    UserLocation.insert("street","武侯区");
    Info.insert("location",UserLocation);
    provideInfo.insert("inputText",Text);
    provideInfo.insert("inputImage",Image);
    provideInfo.insert("selfInfo",Info);
​
    QJsonObject user;
    user.insert("apiKey","2b244339acb64a3d8a8e1b4455a21ead");     // 填入自己注册的图灵机器人apiKey   必须
    user.insert("userId","");                                 //填入 id,必须,否则会显示---没有上传userId!
​
​
    JsonData = new QJsonObject;
    JsonData->insert("reqType",0);
    JsonData->insert("perception",provideInfo);      //嵌套
    JsonData->insert("userInfo",user);
​
    qDebug() << *JsonData;
}
​
/*  解析返回的json格式信息   */
QString Widget::getJson()
{
    QByteArray str = reply->readAll();        //获取信息
​
     QJsonObject json1 = QJsonDocument::fromJson(str).object();
     QJsonArray json2 = json1.value("results").toArray();
     QJsonObject json3 = json2[0].toObject();                 //直接通过下标获取
//     QJsonObject json3;
//     for ( int i = 0; i < json2.size(); i++ )               //循环遍历获取
//     {
//         if ( json2[ i ].isObject() )
//         {
//            json3 = json2[i].toObject();
//            qDebug() << i;
//         }
//     }
     QJsonObject json4 = json3.value("values").toObject();
     QString text = json4.value("text").toString();
​
     return text;
}
​
void Widget::doProceesFinished()
{
    qDebug() <<"结束";
}
​
​

7.widget.ui文件

posted @ 2019-09-08 00:17  mahuifa  阅读(1109)  评论(1编辑  收藏  举报