QT--图灵机器人

摘要:
JsonData=newQJsonObject;JsonData-˃insert(“reqType”,0);JsonData(&g)

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

QT--图灵机器人第1张

免责声明:文章转载自《QT--图灵机器人》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker 搭建 etcd 集群配置Tomcat使用https协议(配置SSL协议)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

boost asio 学习(五) 错误处理

http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Error handling 接下来我们需要注意的话题是错误处理。换句话说就是函数抛出异常时发生了什么 Boost::asio 给予用户两种选择来处理。错误通过han...

Dynamixel数字伺服舵机XM430-W350-R

产品介绍 目前国内研究仿生四足的学者不在少数,但由于伺服驱动器结构复杂、技术门槛高、成本高等原因使得仿生四足机器人的研究困难重重。而伺服舵机则不然,它相对于伺服电机而言具有体积小、价格低等优势,既能达到位置控制又能实现闭环反馈,因此伺服舵机可在某些应用场景代替伺服电机。 今天给大家推荐一款智能佳机器人公司的XM430-W350-R数字伺服舵机(以下简称为...

你可能不知道Windows系统下有一个UNIX子系统

作者:朱金灿 来源:hhttp://blog.csdn.net/clever101 请看下面一段代码: #include <time.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <errno....

Visual C++内存泄露检测—VLD工具使用说明 .

Visual C++内存泄露检测—VLD工具使用说明 一.VLD工具概述 Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具。他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;可以得到泄露内存的完整数据;可以设置内存泄露报告的级别;并且是开源免费的。 二.VLD下载...

Qt5 任务栏托盘功能实现

23333 有一阵子没写博客了,研究了挺长时间qt,学到任务栏托盘时简直无语,网上找得到的代码大多是废码,Qt5不支持或者本身就有毛病不能实现却被n多人转来转去的,甚是无语。 简单托盘功能以下在Qt5.5编译通过: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow>...

音视频技术应用(5)使用QT渲染RGB数据的一个简单示例

这里演示使用QT渲染一幅宽高为1280 * 720的红色RGB图像。 首先需要理解RGB三原色,每个颜色其实都可以用一个byte(0~255)来表示,若R = 0, G = 0, B = 0,用16进制表示则是0x000000,也就是黑色;若R = 255, G = 255, B = 255,用16进制表示则是0xFFFFFF,也就是白色。通过给RGB三原...