6

I am new to Qt.

I am building a console application and I need to process lot of real world html pages. QtWebkit comes as an easy choice because of clearly cut APIs and easy availability.

I checked out the docs and they say that I can load pages by using QWebView::load(). But I am building a console application and I cannot use a widget. I get the error as: ?

QWidget: Cannot create a QWidget when no GUI is being used
The program has unexpectedly finished.

So how can I process the html pages using QtWebkit in console application.

Xolve
  • 22,298
  • 21
  • 77
  • 125

2 Answers2

9

QtWebkit can be used in a widget-less environment, but can't be executed with QCoreApplication.

The solution is to use a fake X server to execute the program.

Install Xvfb and then:

xvfb-run --server-args="-screen 0 1024x768x24" ./framecapture google.cat google.png

PD: Using framecapture Webkit example from docs: http://doc.qt.io/archives/qt-4.7/webkit-framecapture.html

Christophe Weis
  • 2,518
  • 4
  • 28
  • 32
Marçal Juan
  • 1,302
  • 14
  • 20
6

QWebPage can be used in a widget-less environment.

To load a page, do something like this

QWebPage page;
QUrl url = ...;
page.mainFrame()->load(url);

To get access to the DOM tree, you can use QWebFrame::documentElement(). See the API for how to use this.

Alex Kir
  • 77
  • 2
  • 8
mtvec
  • 17,846
  • 5
  • 52
  • 83
  • 1
    @Job I tried it and it doesn't work. Gives me the same error that GUI is not present. – Xolve Aug 21 '10 at 06:11
  • @Xolve: Hmm that's very strange... It should work according to the [docs](http://doc.trolltech.com/latest/qwebpage.html#details). I think the easiest way to do what you want is to use the [QtXml](http://doc.trolltech.com/latest/qtxml.html) module directly instead of getting the DOM tree through QtWebKit. – mtvec Aug 21 '10 at 08:14
  • @Job Actual webpages are better parsed by actual browser. – Xolve Aug 22 '10 at 13:36