栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用java和qt开发远程控制系统-Http工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用java和qt开发远程控制系统-Http工具类

简单写了个Http的工具类,实现发送请求,自动记录请求及返回数据,通过信号机制实现异步回调。

头文件:HttpFun.h

#ifndef HTTPFUN_H
#define HTTPFUN_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

//http请求类
class HttpFun : public QObject
{
    Q_OBJECT

public:
    explicit HttpFun(QObject *parent = 0);
    void sendRequest(const QString& strUrl,const QByteArray& post_data);//根据url发起http请求
    void sendRequest(const QString& key);//按照key发送请求
    void sendRequest();//发送请求
    void append(QString data);//追加一个数据到data
signals:
    void signal_requestFinished(bool bSuccess,const QByteArray& byteResult); //http请求结束
public slots:
    void slot_requestFinished(); //http请求结束
    void slot_requestTimeout();  //请求超时
private:
    void dolog(QString log);
    QNetworkAccessManager* m_pNetworkManager;//网络管理类
    QNetworkReply* m_pNetworkReply; //封装请求返回信息
    QTimer* m_pTimer; //请求超时计时器
    QString m_strUrl; //记录当前请求的url
    QByteArray postdata;//postdata
};

#endif // HTTPFUN_H

源文件:Httpfun.cpp

#include "HttpFun.h"
#include 
#include "common.h"
#include "QDir"


HttpFun::HttpFun(QObject *parent) :
    QObject(parent)
{
    m_pNetworkManager = new QNetworkAccessManager(this);

    m_pNetworkReply = NULL;
    m_pTimer = new QTimer;
    connect(m_pTimer,SIGNAL(timeout()),this,SLOT(slot_requestTimeout()));//超时信号
    postdata.append(styleManager->getString("apiversion")+"&");//api版本数据
}
void HttpFun::dolog(QString log){

        QDir dir("./logs/");
        if(!dir.exists())
        {
            dir.mkdir(QDir::currentPath()+"/logs/");
        }
      QFile file("./logs/http"+QDateTime::currentDateTime().toString("yyyyMMdd")+".log");
      file.open(QIODevice::Append | QIODevice::Writeonly );
      QTextStream text_stream(&file);

      text_stream <post(netRequest,post_data);//发起post请求

//    m_pNetworkReply = m_pNetworkManager->get(netRequest); //发起get请求
    connect(m_pNetworkReply,SIGNAL(finished()),this,SLOT(slot_requestFinished())); //请求完成信号
    int timeout=cfg->NetTimeOut;
   // qDebug()<<"timeout="<600){

           timeout=30;//默认30秒
    }
    //qDebug()<<"timeout="<start(timeout*1000);
}
///
/// brief 根据key来发送请求
/// param key
///
void HttpFun::sendRequest(const QString &key){

    QString apiurl=styleManager->getString(key);

    sendRequest(apiurl,postdata);
    qDebug()readAll();
//    QTextCodec* pCodec = QTextCodec::codecForName("UTF-8");
//    QString strResult = pCodec->toUnicode(resultContent);
    QString rst;
    rst.append(resultContent);
    dolog(rst);
    int nHttpCode = m_pNetworkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();//http返回码
    if(nHttpCode == 200)//成功
    {
        emit signal_requestFinished(true,resultContent);//请求成功
    }
    else
    {
        emit signal_requestFinished(false,resultContent);//请求失败
    }
    //每次结束清空内存  所以不适合用静态实例
    m_pNetworkReply->deleteLater();
    this->deleteLater(); //释放内存
}

//请求超时
void HttpFun::slot_requestTimeout()
{
    emit signal_requestFinished(false,"timeout");//请求失败
    m_pNetworkReply->deleteLater();
    this->deleteLater();//释放内存
}

调用示例:

HttpFun * http=new HttpFun();
 connect(http,SIGNAL(signal_requestFinished(bool,const QByteArray&)), this,SLOT(slot_loginFinished(bool,const QByteArray&)));//http请求结束信号
http->append("请求地址");
http->append("uname="+ui->txtName->text());//参数
http->append("pword="+ui->txtPwd->text());//参数
http->sendRequest();//请求登录

请求结束信号里面写数据处理代码。

//请求结束
void LoginDialog::slot_loginFinished(bool bSuccess, const QByteArray &byteResult)
{
    // qDebug()<<"login result " < 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号