QWebEnginePage:toHtml 返回一个空字符串

Posted

技术标签:

【中文标题】QWebEnginePage:toHtml 返回一个空字符串【英文标题】:QWebEnginePage: toHtml returns an empty string 【发布时间】:2016-04-17 18:38:01 【问题描述】:

我需要从QWebEnginePage 中检索一些 html。我在文档中找到了方法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

我做错了什么?

【问题讨论】:

我将 load() 函数放在 connect 语句之后,删除了 start() 函数,它与 toHtml() 完美配合。 【参考方案1】:

我对 QWebEngine 有所了解。这很酷。我有以下工作。

在发出信号的情况下,lambda 捕获必须是“=”或“this”。您还需要“可变”来修改捕获的副本。然而,toHtml() 是异步的,因此即使您捕获了 html,它也不太可能在调用 SomeFunction 中的 toHtml() 后直接可用。您可以通过使用信号和插槽来克服这个问题。

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;

【讨论】:

【参考方案2】:

我认为问题更多是连接问题。您的代码在我的应用程序上运行良好:

    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););

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review 我不需要您的礼貌告诉我此代码在我的应用程序上运行良好。根据它确实有效的事实,我认为这是答案的一部分,不是吗?

以上是关于QWebEnginePage:toHtml 返回一个空字符串的主要内容,如果未能解决你的问题,请参考以下文章

QWebEnginePage 中的 setFeaturePermission 成员函数如何工作?

将 QWebEngineHistory 保存并加载到 QWebEnginePage

QWebEnginePage 与 javascript 交互不起作用?

是否可以在屏幕外渲染 QWebEnginePage/QWebEngineView?

如何为不同的 QWebEnginePage 实例设置不同的代理?

一个 QWebEnginePage 用于两个或多个 QWebEngineView