Название: QWebView различные траблы а также вывод в него ХТМЛ Отправлено: Dimych от Июль 13, 2011, 19:09 Всем привет. версия QT 4.5
Пытаюсь написать программулину, которая будет через проксю принимать и отправлять данные на вконтакте c помощью GET и POST. Ок, с прокси сервером разобрался, как принять данные методом get разобрался. Не могу разобраться с тем что происходит в QWebView. 1. Например, если использовать webView->setUrl("http://vkontakte.ru/"); Отлично - загружает страницу как надо и вообще всё красиво, однако после загрузки страницы падает из-за ошибки приложения "память не может быть written". Это не сильно важно, т.к. я думаю что это баг QT, но может кто сталкивался. 2. (код ниже)Получаю ответ сервера с помощью QNetworkAccessManager методом get, также я пробовал QHttp. По сигналу readyRead() обрабатываю ответ. потом webView->setHtml(data) для загрузки в виджет QWebView также сливаю ответ сервера в файл. Отлично, приложение не падает, зато теперь не работает ни один стиль CSS который загружается из файла в тегах <head></head> и я так подозреваю что javascript тоже не пашет. Т.е получается что документ загружается но, все подключаемые файлы нет, в итоге на странице нет картинок, стилей, не работают скрипты, это голая ХТМЛ страница. Но это еще не всё, пробовал я это для http://vkontakte.ru/login.php для яндекса, еще для чего-то. Но, например, http://beinmusic.ru/, тут вообще в выходном файле кусок кода конца страницы, а начала кода нет, также без стилей и без всего. 3. Кодировка в QWebView при загрузке страницы с помощью setHtml. Вместо русских букв кракозябры. Я решил эту проблему с помощью QTextCodec, но может есть другой способ - сам ответ сервера ведь приходит в нормальной форме Если все мои проблемы просто потому, что у меня старая версия, а в новых уже всё давно окей работает, то просветите меня пожалуйста об этом:) Также пример исходного кода, той части которая отвечает за сетевую работу. Код: MAINWINDOW.CPP Название: Re: QWebView различные траблы а также вывод в него ХТМЛ Отправлено: sendevent от Июль 13, 2011, 20:16 по существу мало чего скажу - во-первых, много читать, во-вторых - давно не возился.
webView->setHtml(data) - скармливай не только хтмл, но и урл, относительно которого должна быть загрузка скриптов/стилей и пр. внешних ресурсов. по коду: Код: if(!reply){ вообще, есть сигнал QNetworkAccessManager::finished (http://doc.qt.nokia.com/4.7-snapshot/qnetworkaccessmanager.html#finished) - юзай его, отпадет необходимость хранить указатель на риплай. кодировка - приходит и/или в хттп-пакете, и/или в теле хтмл-документа, могут отличаться. если QWebKit, по какой-то причине, обрабатывает не правильно - QTextCodec, на мой взгляд, верное решение. не задавай кучу вопросов в одном топике - в такой каше разбираться не каждый захочет. Название: Re: QWebView различные траблы а также вывод в него ХТМЛ Отправлено: Dimych от Июль 14, 2011, 03:36 Йахууу, всё заработало, и даже без вбития URL в setHtml, sendevent ты был прав, действительно нужно было поставить сигнал finished. Очень странно потому что мне казалось что я его до этого пробовал. Еще QWebView тормозной, яндекс еле открыл.
Еще проблемка - некоторые страницы UTF8, некоторые CP1251, как мне кодек менять в зависимости от того какая страница? Есть какой-то способ? и с этой строчкой я совсем забыл. !reply у меня щас стоит чтобы else выполнялось: Код: f(!reply){ Название: Re: QWebView различные траблы а также вывод в него ХТМЛ Отправлено: sendevent от Июль 14, 2011, 14:50 отлов ошибок - как-то так:
Код: void SomeReceiver::slotRequestFinished( QNetworkReply *pReply ) про кодировку - к сожалению, кода под рукой нету, но там тоже все довольно интуитивно понятно. вообще, вебкит сам без проблем все разруливает в большинстве случаев, скорее всего проблема где-то у тебя - может, кодек для апп не тот стоит (QTextCodec::setCodecForTr( QTextCodec::codecForName( "UTF-8" ) );), или текст без tr(...) выводишь, или еще чего. кодировку можно действительно выдерать из ответа/контента и устанавливать через QTextCodec, но это, все-таки, на крайняк. *** кстати, по поводу тормознутости кувебкит - естесственно, десктопным браузерам проигрывает, где-то больше, где-то меньше, но в общем и целом - довольно шустрая штука, при таких богатых возможностях можно потерпеть. а вот сайт яндекса, как "тестовая площадка днс, пинга и рунета вообще" действительно плохо себя ведет с ним - помнится, что-то у них было с жабоскриптом, грузил проц неимоверно. |