1

ネット経由でファイルをダウンロードすることになっているプログラムがあります。そして、ファイルが小さい(<1GB)限り、すべて問題ありません。しかし、ファイルが 1GB を超えると、次の 2 つのうちのいずれかが発生
します。a) QNetworkReply からのシグナルをダウンロード進行状況とともにスロットの 1 つに接続すると、アプリケーションが std::bad_alloc でクラッシュします
。b) QNetworkReply からのシグナルをまったく接続しない場合、アプリケーションは 73% で停止します。
どんな助けでも大歓迎です。
接続とスロットで使用するコードは次のとおりです。

QNetworkReply* reply = network_access_manager_->get(request);
    connect(reply,SIGNAL(downloadProgress(qint64,qint64)),parent_,SLOT(downloadProgress(qint64,qint64)));  

そして、ここにスロットがあります:

void MainWindow::downloadProgress(qint64 bytesReceived,qint64 bytesTotal)
{

    try
    {
    ui->label->setText(QString::number(bytesReceived));

    ui->label_2->setText(QString::number(bytesTotal));
    ui->progressBar->setRange(0,bytesTotal);
    ui->progressBar->setValue(bytesReceived);
    }
    catch(std::exception& e)
    {
        qDebug() << e.what();
    }

}
4

1 に答える 1

3

QNetworkReplyのドキュメントを読んでください:

QNetworkReply はシーケンシャル アクセスの QIODevice です。つまり、データがオブジェクトから読み取られると、デバイスによって保持されなくなります。したがって、必要に応じてこのデータを保持するのはアプリケーションの責任です。ネットワークからさらにデータを受信して​​処理するたびに、readyRead() シグナルが発行されます。

したがって、readyRead() シグナルを使用して、いつでもダウンロード中に QNetworkReply から読み取り、ファイルまたは任意の場所に書き込むだけです。

ここでは、他の情報を見つけることができます (特に Frank Osterfeld の回答を読んでください): Downloading File in Qt From URL

于 2012-12-15T11:42:33.337 に答える