2010-08-20 11 views
6

Sono nuovo a Qt.QtWebkit: applicazione console

Sto costruendo un'applicazione console e ho bisogno di elaborare molte pagine html del mondo reale. QtWebkit è una scelta facile grazie alle API chiaramente tagliate e alla facile disponibilità.

Ho controllato i documenti e dicono che posso caricare le pagine utilizzando QWebView :: load(). Ma sto costruendo un'applicazione per console e non posso usare un widget. Ho ricevuto l'errore come: ?

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

Quindi, come posso elaborare le pagine html utilizzando QtWebkit nell'applicazione console.

risposta

9

QtWebkit può essere utilizzato in un ambiente senza widget, ma non può essere eseguito con QCoreApplication.

La soluzione è utilizzare un server X falso per eseguire il programma.

Installare Xvfb e quindi:

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

PD: Usando framecapture esempio Webkit da documenti: http://doc.qt.io/archives/qt-4.7/webkit-framecapture.html

6

QWebPage può essere utilizzato in un ambiente senza widget.

per caricare una pagina, fare qualcosa di simile

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

Per ottenere l'accesso alla struttura ad albero DOM, è possibile utilizzare QWebFrame::documentElement(). Vedi il API per come usare questo.

+1

@Job ho provato e non funziona. Mi dà lo stesso errore che la GUI non è presente. – Xolve

+0

http://pastebin.com/aC8mbDTU – Xolve

+0

@Xolve: Hmm è molto strano ... Dovrebbe funzionare secondo [docs] (http://doc.trolltech.com/latest/qwebpage.html#details). Penso che il modo più semplice per fare ciò che vuoi sia utilizzare direttamente il modulo [QtXml] (http://doc.trolltech.com/latest/qtxml.html) invece di ottenere l'albero DOM tramite QtWebKit. – Job