2016-04-17 32 views
0

QWebEnginePageからいくつかのhtmlを取得する必要があります。ドキュメントではtoHtmlというメソッドが見つかりましたが、常に空の文字列が返されます。私はtoPlainText を試しましたが、動作しますが、これは私が必要とするものではありません。QWebEnginePage:toHtmlは空の文字列を返します

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 
} 

私は間違っていますか?

答えて

2

私はQWebEngineの周りに頭を下げています。それは非常にクールです。私は働くには次のものがあります。

lambadaのキャプチャは、信号が放出される場合はすべて「=」または「this」である必要があります。また、キャプチャされたコピーを変更するには、「変更可能」が必要です。 toHtml()は非同期ですので、たとえhtmlをキャプチャしたとしてもtoHtml()への呼び出しの直後にSomeFunctionで利用可能であるとは限りません。信号とスロットを使ってこれを克服することができます。

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

もっと問題が接続問題だと思います。あなたのコードは私のアプリで正常に動作します:...

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

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

...ロード時間...

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

これは、質問への答えを提供していません。十分な[評判](http://stackoverflow.com/help/whats-reputation)があれば、[任意の投稿にコメントする]ことができます(http://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューの投稿](レビュー/低品質の投稿/ 13320562) – lokusking

+0

私のアプリケーションでこのコードがうまく動作することを伝えるのにあなたの礼儀は必要ありません。それが働くという事実に応じて、私はそれが答えの一部だと思います。 – clem

関連する問題