zoukankan      html  css  js  c++  java
  • 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); 即可 达到效果
  • 相关阅读:
    Longest Subsequence CodeForces
    Alyona and towers CodeForces
    Electric Charges CodeForces
    Array GCD CodeForces
    笔记(模拟)
    城堡 (spfa+cheng)
    YOU ARE MY SUNSHINE
    AC日记——潜伏者 洛谷 P1071 (模拟)
    AC日记——神奇的幻方 洛谷 P2615(大模拟)
    AC日记——机器翻译 洛谷 P1540
  • 原文地址:https://www.cnblogs.com/totogo/p/6873993.html
Copyright © 2011-2022 走看看