zoukankan      html  css  js  c++  java
  • QNetworkAccessManager 的使用

    非阻塞式的:

       // client.h 
       
    class Client : public QObject {
            Q_OBJECT
        public:
            explicit Client(const QString &url);
            void sendData(const QString &data);
        public slots:
            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;
        return QString(byteArray);
    }
  • 相关阅读:
    访问通讯录并设置联络人信息
    创建提醒事项
    iOS 高仿:花田小憩3.0.1
    iOS 手机淘宝加入购物车动画分析
    VTMagic 的使用介绍
    React Native 从入门到原理
    用户数据攻略-获取日历事件
    键盘收回方法
    提高jQuery执行效率需要注意几点
    你应该了解的jquery 验证框架
  • 原文地址:https://www.cnblogs.com/onetaste/p/QNetworkAccessManager.html
Copyright © 2011-2022 走看看