Qt5.14 在一个窗口类中使用WebEngineView 通过QWebEngineCallback<QString>获取网页文本
时间: 2024-10-17 15:13:40 浏览: 5
在Qt 5.14中,你可以使用WebEngine模块来在窗口类中集成WebEngineView,它提供了一个高级的浏览器渲染引擎,允许你在应用程序中显示HTML内容并交互。如果你想要从加载的网页中获取文本,可以利用`QWebEngineView`以及它的信号和槽机制,配合`QWebEngineScript` 和 `QWebEngineUrlRequestInterceptor`。
首先,你需要创建一个`QWebEngineView`实例,并设置其加载的URL:
```cpp
QWebEngineView webView;
webView.load(QUrl("https://www.example.com"));
```
然后,为了在页面加载完成后获取网页文本,你可以监听`QWebEngineView`的`loadFinished`信号,这个信号会在页面完全加载完毕时发送。在这个槽函数里,你可以使用`QWebEnginePage`的`toHtml()`方法获取HTML源码,再通过解析获取你需要的文本:
```cpp
QObject::connect(&webView, &QWebEngineView::loadFinished, [this](bool ok) {
if (ok) {
QWebEnginePage* page = webView.page();
QString html = page->toHtml();
// 这里可以使用正则表达式或其他方法解析html以提取文本
QWebEngineScript script = page->scriptWorld()->executeScript(QStringLiteral("document.documentElement.innerText;"));
QString text = script.toString();
// 使用QWebEngineCallback
auto callback = [](QString result) { emit webTextReady(result); };
connect(this, &YourClass::webTextReady, callback, Qt::QueuedConnection);
emit webTextReady(text);
}
});
```
这里假设你有一个信号`webTextReady`用于传递获取到的文本给外部回调,例如一个`QWebEngineCallback<QString>`。注意,使用`QWebEngineScript`的方式需要确保脚本的安全性,因为用户可以编写任意的JavaScript。
阅读全文