基于Qt的简单通过api接口和图灵机器人聊天

基于Qt的简单通过api接口和图灵机器人聊天

头文件

#include <QWidget>
#include <QtNetwork/QTcpSocket>
#include <QPushButton>
#include <QLineEdit>
#include <QTextEdit>
#include <QVBoxLayout> //垂直
#include <QHBoxLayout> //水平
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonParseError>


#include <QCoreApplication>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QString>
#include <QJsonArray>

这里面有些头文件不是必须的(比如布局器,我是通过布局来实现界面的,所以有布局器和各种器件的头文件)。添加头文件之间需要在.pro文件里面Qt后面加上network(即QT += core gui network)。

widget.h

private:
    QLineEdit *lin;   //输入文本框
    QTextEdit *tex;  //输出文本框
    QNetworkAccessManager *manager;
public slots:
    void Send();
    void requestFinished(QNetworkReply * reply);


widget.cpp

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{	 
   ----------------
   // 布局
   --------------
    manager = new QNetworkAccessManager(this);
    connect(push,SIGNAL(clicked(bool)),this,SLOT( Send())); //按下键后发送键入lin框里面的内容(push是发送按钮)
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(requestFinished(QNetworkReply*))); 
    //收到机器人回发的消息时调用

Send()

QString word= lin->text();
    QJsonObject obj1;
 //   obj1.insert("reqType",0);
    QJsonObject Info;
    Info.insert("apiKey"," "); //第二个参数为自己注册图灵机器人后的apikey
    Info.insert("userId"," "); //第二个参数可以随意写(eg:123456)
    obj1.insert("userInfo",Info);

    /*   根据图灵机器人里面的示例代码格式创建json文件
    提示:需要创建一个大的对象( QJsonObject obj1;)再往该对象里面添加其他对象,
    	     最后形成对应格式的json文件    */

    QNetworkRequest request;
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");//发送文件为json格式
    request.setUrl(QUrl("http://openapi.tuling123.com/openapi/api/v2"));
    QByteArray data;
    QJsonDocument doc;
    doc.setObject(obj1);
    data=doc.toJson(QJsonDocument::Indented); //类型转换
    manager->post(request,data);

requestFinished

QByteArray data = reply->readAll();
   //qDebug()<<"bake"<<(QString)data;
    QJsonParseError jsonErrr;
    QJsonDocument doucment = QJsonDocument::fromJson(data,&jsonErrr);
    // 解析json最重要的地方在于根据创建规则按层次进行解析
    if(!doucment.isNull() && (jsonErrr.error == QJsonParseError::NoError))
    {
        if(doucment.isObject()) //文档为对象
        {
            QJsonObject obj =doucment.object(); //转换为对象
            qDebug()<<"obj"<<obj.value("results");
            if(obj.contains("results"))
            {
                 QJsonArray ResArry = obj.value("results").toArray();
                 QJsonValue value= ResArry.at(0);   // 数组里面只有一个json!!!!!!
                 //访问json里面的内容
                 if(value.isObject())
                 {
                     QJsonObject res = value.toObject();
                     if(res.contains("values"))
                     {
                         QJsonObject val =res.value("values").toObject();
                         QString Finally_Val =val.value("text").toString();
                         tex->setText(Finally_Val);
                     }
                 }
            }
        }
    }

创建和解析json文件略微复杂,需要仔细研究帮助中心里面api接入教程中的示例代码。

apikey就是自己前面需要填写的,通过api使用文档,进入帮助中心,然后去找接入教程

程序结果示例这是未将图灵机器人回发的消息解码

最终结果
个人认为解码和转码按照示例代码格式进行编辑是最重要的。
第一次写文,还不太明白其中的套路,望海涵。
关于转码的问题,可以参考此篇博文转码问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值