GUI アプリで使用するテキスト ファイルを Web からダウンロードしようとしています。最初にイベント ループを使用しましたが、ファイルは最初の試行で 0 バイトのファイルをダウンロードしましたが、それ以降の試行では成功しました (アプリはボタンを使用してダウンロードします)。次に、イベントループなしでクラスメンバー定義のスロットを使用しようとしましたが、スロットが呼び出されません。
イベントループの手順は次のとおりです。
    void class1::downloadFile(const QString &url, const QString &aPathInClient)
    {
        QNetworkAccessManager m_NetworkMngr;
        QNetworkReply *reply= m_NetworkMngr.get(QNetworkRequest(url));
        QEventLoop loop;
        QObject::connect(reply, SIGNAL(finished()),&loop, SLOT(quit()));
        loop.exec();
        QUrl aUrl(url);
        QFileInfo fileInfo=aUrl.path();
        QFile file(aPathInClient+"/"+fileInfo.fileName());
        file.open(QIODevice::WriteOnly);
        file.write(reply->readAll());
        file.close();
        reply->deleteLater();
    }
クラスメンバーで定義されたスロットを使用する手順は次のとおりです。
class1.h
    class class1: public QObject
    {
        Q_OBJECT
        public slots:
            void onRequestCompleted();
        public:
            QString df_url;
            QString df_path;
        public:
            void downloadFile(const QString &url, const QString &aPathInClient);
    };
class1.cpp
    void class1::downloadFile(const QString &url, const QString &aPathInClient)
    {
        df_url = url;
        df_path = aPathInClient;
        QNetworkAccessManager m_NetworkMngr;
        QNetworkReply *reply = m_NetworkMngr.get(QNetworkRequest(url));
        QObject::connect(reply, SIGNAL(finished()), this, SLOT(onRequestCompleted()));
        reply->deleteLater();
    }
    void class1::onRequestCompleted( ) 
    {
        QString url2;
        QString aPathInClient2;
        url2 = df_url;
        aPathInClient2 = df_path;
        QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
        QUrl aUrl(url2);
        QFileInfo fileInfo=aUrl.path();
        QFile file(aPathInClient2+"/"+fileInfo.fileName());
        file.open(QIODevice::WriteOnly);
        file.write(reply->readAll());
        file.close();
        reply->deleteLater();
    }
変数の冗長性を許してください。私は彼のポイントでそれを機能させようとしているだけです。後できれいにします。この問題に関するヘルプをいただければ幸いです。返信ありがとうございます。
編集:
私はついに問題を見つけました。別の Web サイトからダウンロードしましたが、すべてが機能しています。最初のサイトからの転送に問題があったに違いありません。イベント ループ アプローチを放棄して、クラス メンバー スロット アプローチを使用しています。
私が使用しているコードは次のとおりです。
  //class1.h
    class class1: public QObject
    {
        //There's a lot more to the class, but here are the pertinent parts
        Q_OBJECT
        public slots:
            void onRequestCompleted();
        public:
            QString df_url;
            QString df_path;
            QNetworkAccessManager *m_NetworkMngr;
            QNetworkReply *reply;
        public:
            void downloadFile(const QString &url, const QString &aPathInClient);
    };
 //class1.cpp
    void class1::downloadFile(const QString &url, const QString &aPathInClient)
    {
        df_url = url;    //class variable
        df_path = aPathInClient;   //class variable
        m_NetworkMngr = new QNetworkAccessManager(this); //class variable
        reply= m_NetworkMngr->get(QNetworkRequest(url)); //class variable
        QObject::connect(reply, SIGNAL(finished()), this, SLOT(onRequestCompleted()));
    }
    void class1::onRequestCompleted() {
        QString url2;
        QString aPathInClient2;
        url2 = df_url;
        aPathInClient2 = df_path;
        QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
        QUrl aUrl(url2);
        QFileInfo fileInfo=aUrl.path();
        QFile file(aPathInClient2+"/"+fileInfo.fileName());
        file.open(QIODevice::WriteOnly);
        file.write(reply->readAll());
        file.close();
    }
downloadFile プロシージャーのパラメーター:
url -string ダウンロードするファイルの URL
aPathInClient - 更新中のファイルを含むフォルダーの文字列の場所
downloadFile は、ボタンを押すことによって呼び出されるプロシージャによって呼び出されます。クラス全体がボタンでインスタンス化され、ボタンのスロットが完了すると破棄されます。したがって、それが発生すると、応答とネットワーク マネージャー オブジェクトが破棄されます。