2016-04-17 17 views
0

Ich brauche etwas HTML von einer QWebEnginePage abrufen. Ich fand in der Dokumentation die Methode toHtml, aber es gibt immer eine leere Zeichenfolge zurück. Ich habe versucht toPlainText und es funktioniert, aber das ist nicht das, was ich brauche.QWebEnginePage: toHtml gibt eine leere Zeichenfolge zurück

MyClass::MyClass(QObject *parent) : QObject(parent) 
{ 
    _wp = new QWebEnginePage(); 
    _wp->settings()->setAttribute(QWebEngineSettings::AutoLoadImages, false); 
    _wp->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true); 
    connect(_wp, SIGNAL(loadFinished(bool)), this, SLOT(wpLoadFinished(bool))); 
} 
void MyClass::start() 
{ 
    _wp->load(QUrl("http://google.com/")); 
} 
void MyClass::wpLoadFinished(bool s) 
{ 
    _wp->toHtml(
     [] (const QString &result) { 
      qDebug()<<"html:"; 
      qDebug()<<result; 
    }); // return empty string 
    /*_wp->toPlainText(
     [] (const QString &result) { 
      qDebug()<<"txt:"; 
      qDebug()<<result; 
    });*/ //works perfectly 
} 

Was mache ich falsch?

Antwort

2

Ich bekomme meinen Kopf um QWebEngine. Es ist sehr cool. Ich habe Folgendes zur Arbeit.

Die Lambda-Aufnahme muss alles sein, was "=" ist, oder "dies", wenn das Signal ausgesendet wird. Sie würden auch "veränderbar" brauchen, um die aufgenommenen Kopien zu modifizieren. toHtml() ist jedoch asynchron, also selbst wenn Sie den HTML-Code erfassen, ist es unwahrscheinlich, dass er direkt nach dem Aufruf von toHtml() in SomeFunction verfügbar wäre. Sie können dies überwinden, indem Sie ein Signal und einen Slot verwenden.

protected slots: 
    void handleHtml(QString sHtml); 

signals: 
    void html(QString sHtml); 



void MainWindow::SomeFunction() 
{ 
    connect(this, SIGNAL(html(QString)), this, SLOT(handleHtml(QString))); 
    view->page()->toHtml([this](const QString& result) mutable {emit html(result);}); 
} 

void MainWindow::handleHtml(QString sHtml) 
{ 
     qDebug()<<"myhtml"<< sHtml; 
} 
1

Ich denke, dass das Problem mehr ein Verbindungsproblem ist. Der Code funktioniert auf meinem Anwen fein:

connect(page, SIGNAL(loadFinished(bool)), this, SLOT(pageLoadFinished(bool))); 

...

page->load(QUrl("http://google.com/")); 

... Ladezeit ...

void MaClasse :: pageLoadFinished(bool s){ 
    page->toHtml([this](const QString &result){   
    qDebug()<<"html:"; 
    qDebug()<<result; 
    item->setHtml(result);}); 
} 
+0

Dies bietet keine Antwort auf die Frage. Sobald Sie genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment); stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (http://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/13320562) – lokusking

+0

Ich brauche nicht Ihre Höflichkeit zu sagen, dass dieser Code in meiner Anwendung funktioniert. Entsprechend der Tatsache, dass es funktioniert, denke ich, dass es ein Teil der Antwort ist, nicht wahr? – clem

Verwandte Themen