2

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

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
}

私は何を間違っていますか?

4

2 に答える 2

4

QWebEngineについて頭を悩ませています。とてもクールです。私は次の作業を行いました。

ラムダダ キャプチャは、「=」、またはシグナルが発行されている場合は「this」である必要があります。キャプチャされたコピーを変更するには、「可変」も必要です。 ただし、非同期であるため、html をキャプチャしたとしても、 intoHtml()への呼び出しの直後に利用できる可能性はほとんどありません。これは、シグナルとスロットを使用することで克服できます。 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;
}
于 2016-06-07T23:27:41.697 に答える
0

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

    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);});
}
于 2016-08-12T14:58:19.567 に答える