Russian Qt Forum
Ноябрь 25, 2024, 23:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Загрузка картинок по url  (Прочитано 7608 раз)
GamBitiK
Гость
« : Октябрь 09, 2014, 21:02 »

как можно скачать картинку и сохранить ее знаю ее url приложение консольное,т.е отображения ее не требует
Записан
Bepec
Гость
« Ответ #1 : Октябрь 09, 2014, 21:32 »

Использовать QNAM. QNetworkAccessManager, методом get запросить картинку. При получении выдрать из хедера именование картинки и сохранить на диск.
Записан
GamBitiK
Гость
« Ответ #2 : Октябрь 09, 2014, 23:09 »

Использовать QNAM. QNetworkAccessManager, методом get запросить картинку. При получении выдрать из хедера именование картинки и сохранить на диск.
С помощью qfile?? А то получить то получил ,а как сохранить на диск не доходит(((
Записан
Bepec
Гость
« Ответ #3 : Октябрь 10, 2014, 01:44 »

Если сможете разобраться - милости просим Улыбающийся

Код:
QPair<QString,QByteArray> NetworkManager::getFile() 
{
errorString_.clear();
QPair<QString,QByteArray>  pair;
QUrl pageUrl_(QString("Тут мы ссылку какую нить ставим");
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;

return pair;
}

PS добрый я какой то в три часа ночи после кружечки чая Веселый
Записан
GamBitiK
Гость
« Ответ #4 : Октябрь 10, 2014, 06:21 »

Если сможете разобраться - милости просим Улыбающийся

Код:
QPair<QString,QByteArray> NetworkManager::getFile() 
{
errorString_.clear();
QPair<QString,QByteArray>  pair;
QUrl pageUrl_(QString("Тут мы ссылку какую нить ставим");
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;

return pair;
}

PS добрый я какой то в три часа ночи после кружечки чая Веселый
Спасибо большое,но вот я так и не нашел той строчки где мы его сохраняет на диск(((
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Октябрь 10, 2014, 06:35 »

С помощью qfile??
Да.
Записан
GamBitiK
Гость
« Ответ #6 : Октябрь 10, 2014, 07:01 »

А как???меня это и мучает,я не знаю как сохранить
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Октябрь 10, 2014, 07:12 »

А как???меня это и мучает,я не знаю как сохранить
bool QFile::open(OpenMode mode) [virtual]
qint64 QIODevice::write(const QByteArray & byteArray)
void QIODevice::close() [virtual]
Записан
Bepec
Гость
« Ответ #8 : Октябрь 10, 2014, 09:33 »

Таки вот почему я добрый был - там же сохранения нет Веселый

Код:
//QPair<QString,QByteArray> inPair;
QFile file(inPair.first);
if (!file.open(QIODevice::WriteOnly))
{
    //тут жалуемся на горькую судьбу, что не дала открыть файл
    return;
}
file.write(inPair.second);
file.close();
Записан
OKTA
Гость
« Ответ #9 : Октябрь 10, 2014, 10:07 »

Забыл еще попутно предупредить о возможных подводных камнях, если использовать QEventLoop вместо человеческих сигналов  Веселый Показает язык Веселый
Записан
carrygun
Гость
« Ответ #10 : Октябрь 10, 2014, 10:10 »

А еще ответ не удаляется.
Записан
Bepec
Гость
« Ответ #11 : Октябрь 10, 2014, 10:25 »

напомните о подводных камнях, пожалуйста.
Записан
carrygun
Гость
« Ответ #12 : Октябрь 10, 2014, 11:22 »

напомните о подводных камнях, пожалуйста.

Может оказаться так, что ответ вы будете ждать часа два (или сколько там по TCP/IP протоколу?).
Записан
Bepec
Гость
« Ответ #13 : Октябрь 10, 2014, 12:18 »

30 секунд. Как и указано в QNam'e по умолчанию. Второй раз уже сообщение пишу, первый раз написал и чуть не поседел - ток недавно проект сдавал, думал забыл об этом и там сейчас такоеееее...
Ан нет, таймаут 30 секунд, по его истечении всё равно издаётся finished, правда с ошибкой.

PS насколько помню, речь о бесконечном ожидании идёт только при некорректном отсоединении сети, когда выдёргивается кабель. Надо проверить тож, ведь обсуждалась эта тема мной ещё на Qt 4.7 .

update: и при выдёргивании нормально работает. Те же 30 секунд Улыбающийся
« Последнее редактирование: Октябрь 10, 2014, 12:22 от Bepec » Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #14 : Октябрь 10, 2014, 13:16 »

Думается имелось ввиду, не очень хорошо использовать данный способ при загрузке картинки по нажатию на кнопку например. Ибо у вас гуй повиснет, хоть и на 30 секунд, но повиснет и это есть зло Улыбающийся Не даром QNAM асинхронный и лучше использовать его асинхронно.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.