WebKit - Save as или как использовать документацию QT

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

WebKit - Save as или как использовать документацию QT

Сообщение Slavikk » 23.05.2011 10:37:14

День добрый.

1. На днях понадобилось получать HTML из WebKit (LCL WebKit Demo можно скачать в конце веб-страницы по интернет адресу: http://users.telenet.be/Jan.Van.hijfte/qtforfpc/fpcqt4.html, его и будем изменять).

2. Хоть и написано, что Qt 4.5 и Qt 4.7 бинарно совместимы, но всё же что бы WebKit начал нормально работать (показывать часть изображений) нужно использовать Qt 4.5.3 (релиз октября 2009): http://get.qt.nokia.com/qt/source/qt-win-opensource-4.5.3-mingw.exe.

3. Включим некоторые настройки WebKit:
Код: Выделить всё
QWebSettings_setAttribute(QWebSettings, QWebSettingsAutoLoadImages, True);
QWebSettings_setAttribute(QWebSettings, QWebSettingsPluginsEnabled, True);   

4. Согласно документации нам нужно получить у текущего WebView его страницу и извлечь у данной страницы её фрейм из которой потом можно получить содержимое загруженной в WebView страницы. На C++ это выглядело бы приблизительно вот так:
Код: Выделить всё
QWebFrame* MyFrame = webView->page()->mainFrame();

5. Первым делом объявим переменную типа QWebFrame, в FreePascal (Lazarus) она имеет дополнительное окончание - H.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
Код: Выделить всё
QWebFrame* MyFrame

6. Получим у текущего WebView его страницу. В изменяемом нами примере необходимо перенести QWebView: QLCLWebViewH из секции private в секцию public класса TWebPanel. Так как в FreePascal (Lazarus) мы обращаемся к библиотеке Qt через стороннюю *.dll то получение свойств класса производится не напрямую, а через специальные процедуры.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
Код: Выделить всё
webView->page()

На FreePascal (Lazarus):
Код: Выделить всё
QWebView_page(ActiveTab.QWebView);

7. Получим фрейм страницы.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
Код: Выделить всё
MyFrame = webView->page()->mainFrame();

На FreePascal (Lazarus):
Код: Выделить всё
MyFrame := QWebPage_mainFrame(QWebView_page(ActiveTab.QWebView));

8. Теперь получим HTML.
Код: Выделить всё
var
  FUrl: WideString;
...
  QWebFrame_toHtml(MyFrame, @FUrl);
  Memo.Lines.Add(UTF8Encode(FUrl)); 
...

9. Теперь руками можно реализовать диалог сохранения файла и при сохранении скачать и сохранить все дополнительные файлы к HTML в виде изображений, css и т.п.

Надеюсь это кому нибудь пригодиться.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Re: WebKit - Save as или как использовать документацию QT

Сообщение Slavikk » 09.06.2011 09:30:33

При использовании WebKit и Qt4Pas V2.1 есть проблема в утечки памяти (может быть только у меня). Для её устранения на официальной странице разработчика Qt4Pas (http://users.telenet.be/Jan.Van.hijfte/qtforfpc/fpcqt4.html) можно прочитать рассылку (http://lists.lazarus.freepascal.org/pipermail/qt/) где в июне обсуждается новая версия Free Pascal Qt4 Binding - Release Candidate V2.3RC (http://users.telenet.be/Jan.Van.hijfte/qtforfpc/V2.3RC/). Правда для Windows скачать можно только исходные коды на C++.

Скачаем и установим Qt 4.7.3 (под mingw) и Qt Creator 2.2.0. В настройках Qt Creator пропишем путь к qmake (при попытке создания нового проекта система подскажет что и где прописать). После чего откроем файл: C:\Qt\4.7.3\mkspecs\win32-g++\qmake.conf и внесём исправления согласно инструкции: http://developer.qt.nokia.com/forums/viewthread/6231, иначе из-за этого бага Qt не соберётся итоговая *.dll. Открываем Free Pascal Qt4 Binding - Release Candidate V2.3RC и собираем.

Так же можно поставить Lazarus-0.9.31-fpc-2.4.3 и пересобрать проект в нём. После чего радоваться жизни и свободной памяти.

Для тех кому лень устанавливать Qt и Qt Creator, даю ссылку на на собранную *.dll и необходимые *.dll из Qt: http://narod.ru/disk/15463158001/QtLib.7z.html.
Так же для работы с изображениями нужны библиотеки из папки: C:\Qt\4.7.3\plugins\imageformats (http://narod.ru/disk/15475680001/imageformats.7z.html).
Не стоит забывать, что это минимальный набор *.dll и в нём нет QtOpenGL4.dll или QtMultimedia4.dll, поэтому не весь функционал браузера будет работать. Полный набор *.dll можно взять из папки C:\Qt\4.7.3\bin, после установки Qt.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 50

Рейтинг@Mail.ru
cron