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文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM