QT学习_青云客网络聊天
Posted Leslie X徐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT学习_青云客网络聊天相关的知识,希望对你有一定的参考价值。
青云客网络聊天
以下实现简单青云客网络聊天功能,使用QT界面实现
聊天功能接口类设置
head:
/** AI聊天接口**/
class IAIChatter : public QObject
{
Q_OBJECT
public:
explicit IAIChatter(QObject *parent = nullptr);
public slots:
virtual void chat(const QString& message)=0;
signals:
void respond(QString);
void error(QString);
};
/** 青云客 */
class AIChatterQingYunKe : public IAIChatter
{
Q_OBJECT
public:
explicit AIChatterQingYunKe(QObject* parent = nullptr);
public slots:
virtual void chat(const QString &message) override;
private:
QNetworkAccessManager* getManager;
};
sources:
IAIChatter::IAIChatter(QObject* parent)
: QObject(parent)
{
}
/** 青云客闲聊,get方法 **/
//http://api.qingyunke.com/
AIChatterQingYunKe::AIChatterQingYunKe(QObject* parent)
: IAIChatter(parent), getManager(new QNetworkAccessManager(this))
{
//当getManager获取到传来的信息后,发送finished信号
//然后由QNetworkReply对象响应,使用 readAll 函数读取数据信息
QObject::connect(getManager, &QNetworkAccessManager::finished, [=](QNetworkReply* reply){
do{
if(reply->error() != QNetworkReply::NoError){
emit error(reply->errorString());
break;
}
QJsonParseError err;
auto object = QJsonDocument::fromJson(reply->readAll(), &err).object();
if(err.error != QJsonParseError::NoError){
emit error(err.errorString());
break;
}
qDebug() << "[chat result]" << object;
if(object["result"].toInt() != 0){
emit error(tr("解析失败, 状态码:%1").arg(object["status"].toInt()));
break;
}
// 结果在json的content中
emit respond(object["content"].toString());
}while(0);
reply->deleteLater();
});
}
// get获取即可
void AIChatterQingYunKe::chat(const QString& message)
{
QNetworkRequest request(QUrl("http://api.qingyunke.com/api.php?key=free&appid=0&msg=" + message));
getManager->get(request);
}
QT界面程序编写
Widget head:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "IAIChatter.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void onrecord(const QString& message);
void onrespond(const QString& message);
void on_pushButton_clicked();
private:
Ui::Widget *ui;
AIChatterQYK *chatter;
};
#endif // WIDGET_H
widget source:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
chatter = new AIChatterQYK(this);
//signals & slots
QObject::connect(chatter,&AIChatterQYK::respond,
this,&Widget::onrespond);
}
Widget::~Widget()
{
delete ui;
}
void Widget::onrespond(const QString &message)
{
ui->textEdit->setText(message);
qDebug()<<message;
}
void Widget::on_pushButton_clicked()
{
QString str(ui->lineEdit->text());
onrecord(str);
}
void Widget::onrecord(const QString &message)
{
chatter->chat(message);
}
以上是关于QT学习_青云客网络聊天的主要内容,如果未能解决你的问题,请参考以下文章