Как закачивать картинку средствами Qt

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by eldar85, 21 Feb 2010.

  1. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    никак не могу найти, как закачать картинку средствами Qt. Всюду примеры закачки текстовых файлов и .html.
    но нигде нету и даже в документации как скачивать чертову картинку в формате .jpg .gif.
    Кто нить сталкивался с таким? подскажите пожалуйста в какую сторону копать :confused:
    заранее благодарен)
     
  2. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    QFile file;
    file.setFileName("image.gif");
    if(!file.open(QIODevice::WriteOnly))
    {
    QMessageBox::warning(this, tr("HTTP GET"),
    tr("Can't write file")
    .arg(file.fileName())
    .arg(file.errorString()));
    return;
    }


    QHttp *http = new QHttp;


    http->get("http://www.какой нить адресс.gif", &file);
    file.close();

    вот что пришло на ум)) подскажите плиз, что тут не так?
     
  3. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    почему то такая запись вообще вызывает ошибку программы и винда ее сразу закрывает.
    главное косяк где то в этой строке http->get("http://www.какой нить адресс.gif", &file);
    если написать так http->get("http://www.какой нить адресс.gif"); то зависания не происходит.
    Хотя я вообще не уверен что делаю тут хоть что то правельно...
     
  4. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    QFile file;
    file.setFileName("kartinka.jpg");
    if(!file.open(QIODevice::WriteOnly))
    {
    QMessageBox::warning(this, tr("HTTP GET"),
    tr("Can't write file")
    .arg(file.fileName())
    .arg(file.errorString()));
    return;
    }

    QHttp *http = new QHttp;
    http->setHost("img68.imageshack.us");

    http->get("/img68/6868/decayinghopesbyblackribca8.jpg", &file);

    file.close();
    http->closeConnection();


    вот и так попробывал, один хрен прога вылетает с предложением отправить отчет в майкрософт)))
     
  5. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    проблема решилась таким способом)))

    void loader_http()
    {
    QFile file( "save.gif" );
    if( !file.open( QIODevice::WriteOnly ) )
    {
    qDebug() << "Error create file";
    return;
    }

    QHttp http;
    QEventLoop loop;
    QObject::connect( &http, SIGNAL( done( bool ) ), &loop, SLOT( quit() ) );

    http.setHost( "www.prog.org.ru" );
    http.get( "/Themes/default/images/smflogo.gif", &file );
    loop.exec();

    qDebug() << http.state() << http.error() << http.bytesAvailable();
    }
     
  6. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    можно еще и вот так))

    void loader_nam()
    {
    QEventLoop loop;
    QNetworkAccessManager manager;
    QNetworkReply *reply = manager.get( QNetworkRequest( QUrl( "http://prog.org.ru/Themes/default/images/smflogo.gif" ) ) );
    QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );
    loop.exec();

    qDebug() << reply->error() << reply->bytesAvailable();
    QByteArray buf = reply->readAll();
    QFile file( "save.gif" );
    if( file.open( QIODevice::WriteOnly ) )
    {
    file.write( buf );
    }
    }