Название: Загрузка картинок по url Отправлено: GamBitiK от Октябрь 09, 2014, 21:02 как можно скачать картинку и сохранить ее знаю ее url приложение консольное,т.е отображения ее не требует
Название: Re: Загрузка картинок по url Отправлено: Bepec от Октябрь 09, 2014, 21:32 Использовать QNAM. QNetworkAccessManager, методом get запросить картинку. При получении выдрать из хедера именование картинки и сохранить на диск.
Название: Re: Загрузка картинок по url Отправлено: GamBitiK от Октябрь 09, 2014, 23:09 Использовать QNAM. QNetworkAccessManager, методом get запросить картинку. При получении выдрать из хедера именование картинки и сохранить на диск. С помощью qfile?? А то получить то получил ,а как сохранить на диск не доходит(((Название: Re: Загрузка картинок по url Отправлено: Bepec от Октябрь 10, 2014, 01:44 Если сможете разобраться - милости просим :)
Код: QPair<QString,QByteArray> NetworkManager::getFile() PS добрый я какой то в три часа ночи после кружечки чая :D Название: Re: Загрузка картинок по url Отправлено: GamBitiK от Октябрь 10, 2014, 06:21 Если сможете разобраться - милости просим :) Спасибо большое,но вот я так и не нашел той строчки где мы его сохраняет на диск(((Код: QPair<QString,QByteArray> NetworkManager::getFile() PS добрый я какой то в три часа ночи после кружечки чая :D Название: Re: Загрузка картинок по url Отправлено: Old от Октябрь 10, 2014, 06:35 С помощью qfile?? Да.Название: Re: Загрузка картинок по url Отправлено: GamBitiK от Октябрь 10, 2014, 07:01 А как???меня это и мучает,я не знаю как сохранить
Название: Re: Загрузка картинок по url Отправлено: Old от Октябрь 10, 2014, 07:12 А как???меня это и мучает,я не знаю как сохранить bool QFile::open(OpenMode mode) [virtual]qint64 QIODevice::write(const QByteArray & byteArray) void QIODevice::close() [virtual] Название: Re: Загрузка картинок по url Отправлено: Bepec от Октябрь 10, 2014, 09:33 Таки вот почему я добрый был - там же сохранения нет :D
Код: //QPair<QString,QByteArray> inPair; Название: Re: Загрузка картинок по url Отправлено: OKTA от Октябрь 10, 2014, 10:07 Забыл еще попутно предупредить о возможных подводных камнях, если использовать QEventLoop вместо человеческих сигналов :D :P :D
Название: Re: Загрузка картинок по url Отправлено: carrygun от Октябрь 10, 2014, 10:10 А еще ответ не удаляется.
Название: Re: Загрузка картинок по url Отправлено: Bepec от Октябрь 10, 2014, 10:25 напомните о подводных камнях, пожалуйста.
Название: Re: Загрузка картинок по url Отправлено: carrygun от Октябрь 10, 2014, 11:22 напомните о подводных камнях, пожалуйста. Может оказаться так, что ответ вы будете ждать часа два (или сколько там по TCP/IP протоколу?). Название: Re: Загрузка картинок по url Отправлено: Bepec от Октябрь 10, 2014, 12:18 30 секунд. Как и указано в QNam'e по умолчанию. Второй раз уже сообщение пишу, первый раз написал и чуть не поседел - ток недавно проект сдавал, думал забыл об этом и там сейчас такоеееее...
Ан нет, таймаут 30 секунд, по его истечении всё равно издаётся finished, правда с ошибкой. PS насколько помню, речь о бесконечном ожидании идёт только при некорректном отсоединении сети, когда выдёргивается кабель. Надо проверить тож, ведь обсуждалась эта тема мной ещё на Qt 4.7 . update: и при выдёргивании нормально работает. Те же 30 секунд :) Название: Re: Загрузка картинок по url Отправлено: ecspertiza от Октябрь 10, 2014, 13:16 Думается имелось ввиду, не очень хорошо использовать данный способ при загрузке картинки по нажатию на кнопку например. Ибо у вас гуй повиснет, хоть и на 30 секунд, но повиснет и это есть зло :) Не даром QNAM асинхронный и лучше использовать его асинхронно.
Название: Re: Загрузка картинок по url Отправлено: Bepec от Октябрь 10, 2014, 13:28 Не повиснет.
Это евент луп, по умолчанию все пользовательские события проходят. Так что всё нормально с гуи. Кнопки нажимаются, картинки перерисовываются. Другой вопрос что действия будут совершаться после обработки евент лупа :) Хотя с ним довольно странная ситуация, вроде поток один, а пара-тройка евент лупов параллельно работать может :) Название: Re: Загрузка картинок по url Отправлено: GamBitiK от Октябрь 11, 2014, 19:15 что он вообще не работает
main.cpp #include <QCoreApplication> #include<picture.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Picture pa; pa.getFile(); } picture.cpp #include "picture.h" Picture::Picture(QObject *parent) : QObject(parent) { } QPair<QString,QByteArray> Picture::getFile() { QNetworkAccessManager *manager_= new QNetworkAccessManager(this); QPair<QString,QByteArray> pair; QUrl pageUrl_(QString("http://im1-tub-ru.yandex.net/i?id=d47fcb314678c246b91d961ec72fb78e-132-144&n=21")); QEventLoop loop; QNetworkReply * reply_ = manager_->get(QNetworkRequest(QUrl(pageUrl_))); connect(reply_, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); QString stringHeader(reply_->rawHeader(QString("Content-Disposition").toLatin1())); stringHeader.replace("attachment; filename=",""); stringHeader = stringHeader.simplified(); stringHeader.replace(":","-"); stringHeader.replace("/","-"); stringHeader.replace("\\","-"); pair.first = stringHeader; QByteArray tempContent = reply_->readAll(); pair.second = tempContent; QFile file(pair.first); if (!file.open(QIODevice::WriteOnly)) { qDebug()<<"bad"; } file.write(pair.second); file.close(); return pair; } |