Задача мелкая и простая. Получим HTML код какой-нибудь страницы.
Первым делом добавим поддержку QtWebKit в проект. Для этого в файле проекта (расширение .pro) в любом месте добавляем строчку:
Первым делом добавим поддержку QtWebKit в проект. Для этого в файле проекта (расширение .pro) в любом месте добавляем строчку:
QT += webkit
Что мы будем делать далее в общем чертах?
Мы создаём свой класс от класса QObject, туда добавляем класс QWebPage, и связываем некоторые его сигналы с нашим классом, дабы мы могли проследить за процессом загрузки, а по окончанию загрузки извлечь необходимый нам HTML код. Вывод HTML кода я сделал через QDebug дабы не нагружать исходник.
Объявление класса:
#ifndef WEBPAGEPARSER_H
#define WEBPAGEPARSER_H
#include <QObject>
#include <QtWebKit/QWebPage>
#include <QtWebKit/QWebFrame>
#include <QDebug>
class WebPageParser : public QObject
{
Q_OBJECT
public:
WebPageParser(const QUrl &url); // конструктор, получающий в качестве единственного аргумента ссылку на страницу.
private slots:
void readHTML(); // Функция, извлекающая html код страницы по окончании загрузки
void loadProgress(int progress); // Функция, получающая текущее состояние загрузки (от 0 до 100)
private:
QWebPage page; // Наша страница %)
};
#endif // WEBPAGEPARSER_H
Теперь опишу каждый метод по отдельности.
1) Конструктор WebPageParser(const QUrl &url):
WebPageParser::WebPageParser(const QUrl &url)
{
page.mainFrame()->load(url); // url - адрес страницы, после вызова этого метода начинается загрузка страницы
connect(&page, SIGNAL(loadFinished(bool)), this, SLOT(readHTML())); // сигнал loadFinished вызывается по окончании загрузки интернет страницы
connect(&page, SIGNAL(loadProgress(int)), this, SLOT(loadProgress(int))); // сигнал loadProgress вызывается при каждом изменении состоянии загрузки
}
2) Слот void loadProgress(int progress):
void WebPageParser::loadProgress(int progress)
{
qDebug() << "progress = " << progress; // выводим текущее состояние загрузки в qDebug()
}
3) слот void readHTML() :
void WebPageParser::readHTML()
{
qDebug() << page.mainFrame()->toHtml(); // выводим html код страницы
}
После запуска приложения в консоли (или в отладке) вы увидите HTML код нужной вам страницы.
у меня по данному примеру не отображаются русские символы (вместо них - кракозябры). Проект в UTF-8. Если сама страничка тоже в UTF-8 (сохраняю на компе, меняю кодировку), то все работает нормально. Как с этим бороться???
ОтветитьУдалитьhttp://easy-qt.blogspot.ru/2012/11/qt.html Там всё подробно описано :)
ОтветитьУдалитьно ведь сама интнрнет-страница в другой кодировке!!!...при попытке ее чтения из инета и получаются кракозябры=((
ОтветитьУдалитьВообще из интернета так же приходят в UTF-8. В index.html должна быть указана кодировка. Я проверял :)
ОтветитьУдалитьу меня проблема связи с этим кодом... когда я использую ее в main() то все ок... но когда использую в другом классе, например в функции то оно не работает... скорее всего не работает только этот фрагмент
ОтветитьУдалитьpage.mainFrame()->load(url);
помогите пожалуйста.
Не в то время ты писал :)
УдалитьА как оно "не работает"? Ошибку выдает или что?
как подключить это в main.cpp?
ОтветитьУдалить