1

Qt/C++ を使用して Web から画像をダウンロードするアプリケーションを作成しようとしています。プログラムは URL のリストをテキスト ファイルとして提供し、各 URL を開いて各 Web サイトのすべての画像をダウンロードする必要があります。

そのために、QNetworkAccessManager をサブクラス化し、createRequest以下のようにメソッド/関数をオーバーライドします。

QNetworkReply* clsNAM::createRequest(Operation op,const QNetworkRequest & req,
                                                    QIODevice * outgoingData )
{
    return new clsNR(QNetworkAccessManager::createRequest(_op,_req,_outgoingData));
}

私の QNetworkReply クラスのサブクラスである clsNR は、生のヘッダーから応答のタイプを次のように識別します。

bool clsNR::isImage()
{
    if(this->rawHeader("Content-Type").toLower().startsWith("image"))
       return true;
    else
       return false;
}

readyRead シグナルを取得すると (つまり、読み取り可能なデータがあることを意味します)、受信したシグナルを QbyteArray に格納します。QNetworkReply が終了したときにイメージを保存するために、clsNR にスロットを接続しました。次のようになります。

void clsNR::slotCloseConnection()
{
    if(isImage())
    {
      QImage image;
      bool bool1 = image.loadFromData(ContentData);
      QString name(QDir::homePath());
      name.append(this->url().path());
      bool bool2 = image.save(name,0,-1);
    }
}

私の節約には何か問題があります。bool1ですがtrue、_ 名前に URL パスを使用している理由は、画像に一意の名前を生成するためです。名前を印刷すると、次のようになります。bool2false

"/home/guest/images/splash/3.jpg"

私の質問は次のとおりです。

  1. QImageで何が間違っていますか?
  2. 代わりに QFile と QStream を使用して画像を書き留めることはできますか?
4

1 に答える 1

0

マットがコメントで言ったように、何か他のものを追加します。ディレクトリが存在するかどうかを確認する必要がある場合はQdir::exists()を使用し、作成する必要がある場合はQDir::mkdir()を使用します

于 2012-12-23T12:28:55.617 に答える