Название: А как просто картинку загрузить? [SOLVED] Отправлено: Гурман от Апрель 14, 2011, 15:31 Есть прямой урл картинки формата JPG. Надо ее получить в QImage. И что-то не очень видно, как это сделать.
Код: QImgage pic( URL ); работать не должно, поскольку URL - не имя файла. Загружать всю страницу и разбирать ее содержимое через DOM не годится, программа получает прямые ссылки на картинки, которые надо слизать. Название: Re: А как просто картинку загрузить? Отправлено: Пантер от Апрель 14, 2011, 15:35 Скачай и loadFromData
Название: Re: А как просто картинку загрузить? Отправлено: Гурман от Апрель 14, 2011, 15:41 Цитировать Скачай Как? В WebKit есть простой способ это сделать? Название: Re: А как просто картинку загрузить? Отправлено: Пантер от Апрель 14, 2011, 15:42 QNetworkAccessManager
Название: Re: А как просто картинку загрузить? Отправлено: Гурман от Апрель 14, 2011, 15:48 а более высокого уровня в WebKit нет средств?
Название: Re: А как просто картинку загрузить? Отправлено: Fess от Апрель 15, 2011, 06:48 У вас же есть урл нужного изображения, вот и качайте его простым get-ом.
Ничего более сложного здесь не нужно. Можете даже не сохранять, а сразу создавать QImage/QPixmap из потока данных. Название: Re: А как просто картинку загрузить? Отправлено: Гурман от Апрель 15, 2011, 12:52 хотелось что-нибудь типа
QImage pic = getWebImage( "http://сервер.там/image.jpg" ); если есть где-то готовое getWebImage(), но очевидно нет, значит придется самому написать, вместо одной строки будет лишние два десятка тем более, что WebKit в статике не собирается, начиная с 4.7.0 его поддержка для статической сборки отменена :-[ Название: Re: А как просто картинку загрузить? Отправлено: Sancho_s_rancho от Апрель 15, 2011, 13:06 QNetworkAccessManager
QNetworkAccessManager QNetworkAccessManager QNetworkAccessManager ыыыыыыыыыыы Название: Re: А как просто картинку загрузить? Отправлено: Гурман от Апрель 17, 2011, 20:27 переделал на использование QNetworkAccessManager, тем более, что с WebKit в статике не собирается
но манагер работает асинхронно, а мне надо по очереди грузить и обрабатывать изображения, и что-то никак не вижу, как корректно сделать ожидание загрузки каждой следующей картинки, цикл крутится, открывает кучу соединений, стремительно пожирает память, а слот обработки окончания загрузки самой первой картинки так и не запускается хотя он правильно привязан, проверял на одной картинке - она грузится, слот вызывается, обрабатывает тупо флаг взводить в обработчике завершения загрузки картинки - не правильно, будет процессор пожираться, да и не работает, кстати... есть способ сделать сетевые операции синхронными, чтобы get() возвращался только когда обработчик завершения и все остальные отработают? Название: Re: А как просто картинку загрузить? Отправлено: Гурман от Апрель 18, 2011, 00:24 не, блин, мозги сломал... уже и с семафорами пробовал - бестолку
наверно дело в том, что прорисовку картинок решил вставить в перегруженный метод paintEvent() Код: void MainWindow::paintEvent( QPaintEvent * event ) более подходящего места что-то не вижу, может кто подскажет? всадил туда, поскольку картинки надо показывать в окне, то есть, отрисовывать, и вроде как paintEvetn для этого подходящее место, но возможно нет когда загружен список картинок с помощью listmanager, метод его обработки вызывается Код: void MainWindow::finishedList( QNetworkReply * reply ) и вот после этого косяк, запросы с адресами из urllist явно набиваются в очередь вызовами imgmanager->get(), и пока они не закончат набиваться, ни один из запросов не завершается, и только когда они все набились, все это завершилось, только тогда начинает стрелять вызовами void MainWindow::finishedImg( QNetworkReply * reply ), где собственно картинки рисуются в окне с помощью QLabel, и там же обрабатываются такое не годится, мне надо картинки обрабатывать последовательно, одну за другой, их могут быть десятки тысяч можно как-то пропихивать эту очередь в QNetworkAccessManager()? Название: Re: А как просто картинку загрузить? [SOLVED] Отправлено: Гурман от Апрель 18, 2011, 22:13 все, победил - оказалось, что хотя QNetWorkManager и асинхронный, но при вызове его из обработчиков событий он корректно не работает
при вызове из отдельных тредов или слотов обработки сигналов таймера работает нормально Название: Re: А как просто картинку загрузить? [SOLVED] Отправлено: GreatSnake от Апрель 19, 2011, 10:02 Цитировать более подходящего места что-то не вижу, может кто подскажет? Хм, пожалуй, это самое неподходящее место.MainWindow::paintEvent() - будет вызван только после ресайза или update(). Причём асинхронно. Если хотите грузить картинки синхронно, то нужно заряжать QEventLoop: Код
Название: Re: А как просто картинку загрузить? [SOLVED] Отправлено: Гурман от Апрель 23, 2011, 20:36 Цитировать MainWindow::paintEvent() - будет вызван только после ресайза или update(). ничего подобного, он всегда вызывается при первой отрисовке окна, поэтому внутри него Код: if( firstpaint ) вполне съедобно, но не в том случае, если требуется работа с сетью, что к сожалению, нигде не документировано |