QNetworkAccessManager 的使用

摘要:
非阻塞式的://client.hclassClient:publicQObject{Q_OBJECTpublic:explicitClient(constQString&url);voidsendData(constQString&data);publicslots:voidreplyFinished(QNetworkReply*reply);private:voidwaitForFinish(c

非阻塞式的:

   //client.h 
   
class Client : publicQObject {
        Q_OBJECT
    public:
        explicit Client(const QString &url);
        void sendData(const QString &data);
    publicslots:
        void replyFinished(QNetworkReply*reply);
    private:
        void waitForFinish(const QHttp  &http);
        QNetworkAccessManager*m_manager;
        QString mUrl;
};


//client.cpp
#include <QNetworkAccessManager>#include <QNetworkReply>#include <QUrl>
Client::Client(const QString &url) {
    mUrl =url;
    m_manager = new QNetworkAccessManager(this);
    connect(m_manager, SIGNAL(finished(QNetworkReply*)), this,
            SLOT(replyFinished(QNetworkReply*)));
}

void Client::replyFinished(QNetworkReply*reply) { // 应答槽函数
    if (reply && reply->error() ==QNetworkReply::NoError) {
        QByteArray data = reply->readAll();
        qDebug() << "---------------------------------
" <<data;
    } else{
        //error
}
    reply->close();
}

void Client::sendData(const QString &data) { // data为发送的数据
    QNetworkRequest request;
    request.setUrl(QUrl(mUrl)); // 设置url
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); // 设置头信息
    m_manager->post(request, data.toUtf8());
}

阻塞式的:

QString Client::sendData(const QString &data) {
    m_manager = new QNetworkAccessManager(this);
    QNetworkRequest request;
    QEventLoop loop; // 使用QEventLoop实现阻塞
    QNetworkReply *reply;

    request.setUrl(QUrl(mUrl));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    reply = m_manager->post(request, data.toUtf8());

    connect(m_manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit())); // connect
    loop.exec();
    QByteArray byteArray = reply->readAll();
    qDebug() <<byteArray;
    delete reply;
    delete m_manager;
    returnQString(byteArray);
}

免责声明:文章转载自《QNetworkAccessManager 的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos7修改root密码NVIDIA深度学习Tensor Core性能解析(上)下篇

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

相关文章

《Qt数据类型》--QByteArray,QString,int,hex之间的转化

对于QString和QByteArray,他们都有一个toInt的静态函数,QString::toInt()是根据string的字面值转化为int类型,比如string:"123",转化为int类型就变为int:123。而对于QByteArray::toInt()是将16进制的数据转化为10进制之后得到int类型,比如byte:0xf8-->dec:...

Qt编写地图综合应用6-百度在线地图

一、前言 百度在线地图的应用老早就做过,后面经过不断的完善才到今天的这个程序,除了基本的可以载入地图并设置一些相关的属性以外,还增加了各种js函数直接异步加载数据比如动态添加点、矩形、圆形、行政区划等各种。当然最大的是增加了离线地图的支持,当年这个离线地图拖了很久很久才去做,最终还是搞定了。 在线地图没有太多的难点,搞一个简单的在线地图demo绝对是分分钟...

4.4 移除控制标记

【1】原代码 1 // 重构前 2 QString foundPerson(QStringList people) 3 { 4 QString found = QString(); 5 for (int i = 0; i < people.size(); ++i) 6 { 7 if (...

QT QString类型转换为const char*(toLatin1)

Qstring str = "helloworld"; char *s; QByteArray ba = str.toLatin1(); s = ba.data(); toLatin1、toLocal8Bit都是QString转QByteArray的方法,Latin1代表ASCII,Local8Bit代表unicode。 const char* -- 指...

Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)

简述 QProcess可以用来启动外部程序,并与它们交互。 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。 另外,也可以使用setProgram()和setArguments()来运行,然后调用start()或open()。 简述 接口 示例 cmd 启动cmd cmd...

qt 中lineEdit-&amp;gt;setText()输出double

在qt中需要将获取到的double 值在ui界面上显示出来,便于观察。但是lineEdit控件的setText()要求的参数是string。 所以我们先要进行转化,将double 转化为string. QString QString::number ( double n, char format = 'g', int precision = 6 ) [st...