QT--图灵机器人
阅读原文时间:2023年07月16日阅读:1

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

2.获取apikey

3.pro文件添加

QT       += core gui network

4.头文件

#include //三个http必须头文件
#include
#include

5.widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include

#include //三个http必须头文件
#include
#include


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
#include
#include
#include //json
#include
#include
#include

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::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",);
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[].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文件

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章