QWebEnginePage: toHtml returns 一个空字符串
QWebEnginePage: toHtml returns an empty string
我需要从 QWebEnginePage
中检索一些 html。我在文档中找到了方法 toHtml but it always returns an empty string. I tried 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
}
我做错了什么?
我正在研究 QWebEngine。这很酷。我有以下工作。
lambada 捕获需要全部为“=”,或者 "this" 在发出信号的情况下。您还需要 "mutable" 来修改捕获的副本。然而,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;
}
我认为问题更多是连接问题。您的代码在我的应用程序上运行良好:
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);});
}
我需要从 QWebEnginePage
中检索一些 html。我在文档中找到了方法 toHtml but it always returns an empty string. I tried 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
}
我做错了什么?
我正在研究 QWebEngine。这很酷。我有以下工作。
lambada 捕获需要全部为“=”,或者 "this" 在发出信号的情况下。您还需要 "mutable" 来修改捕获的副本。然而,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;
}
我认为问题更多是连接问题。您的代码在我的应用程序上运行良好:
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);});
}