• QNetworkaccessManager是异步上传的


    最近在弄FTP功能,用到了QNetworkaccessManager类的put,

    使用过程中把本地目录中的3个txt 上传到ftp上,

    void WorkThread::DoWork()

    {
            for(int i=0;i<txtFileInfoListT.size();i++)
            {
                QThread::msleep(5000);
                QString txtFileName = txtFileInfoListT.at(i).fileName();
                qDebug()<<"file txt:"<<txtFileName;
                m_ftp.put(localDir+"\"+txtFileName,ftpDir+"/"+txtFileName);
            }
    
    
    }
    结果执行后 的效果是 这个循环执行完后 才 开始上传到FTP
    这与想要的结果明显不一样,
    后来发现 QNetworkaccessManager是异步上传的模式,

    // 上传文件
    void FtpManager::put(const QString &fileName, const QString &path)
    {
        QFile file(fileName);
        file.open(QIODevice::ReadWrite);
        QByteArray data = file.readAll();
        m_pUrl.setPath(path);
        qDebug()<<"path:"<<path;
    
    
        QEventLoop loop;
        QNetworkReply *pReply = m_manager.put((QNetworkRequest)m_pUrl, data);
        //connect(pReply, SIGNAL(uploadProgress(qint64, qint64)), this, SIGNAL(uploadProgress(qint64, qint64)));
        connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SIGNAL(error(QNetworkReply::NetworkError)));
        connect(pReply,SIGNAL(finished()),this,SLOT(finished()));
        connect(pReply,SIGNAL(bytesWritten(qint64)),this,SLOT(onDataWrite(qint64)));
        connect(pReply,SIGNAL(finished()),&loop,SLOT(quit()),Qt::DirectConnection);
        loop.exec();
    }
    另上 QEventLoop loop;事件后再绑定connect(pReply,SIGNAL(finished()),&loop,SLOT(quit()),Qt::DirectConnection); 即可 达到效果
  • 相关阅读:
    lambda表达式
    切片操作
    小样本学习(Few-shot Learning)
    TensorFlow Eager 模式
    tensorflow读入数据集的方式
    综述类解读
    pyCharm永久激活
    shell脚本教程
    GNN
    Tomcat配置优化
  • 原文地址:https://www.cnblogs.com/totogo/p/6873993.html
Copyright © 2020-2023  润新知