Qt5.14中QWebEngineView如何和JsonScript进行交互
时间: 2024-09-21 21:04:49 浏览: 17
在Qt 5.14版本的QWebEngineView中,QWebEngineView提供了一种与JavaScript交互的方式,通过JsonScript API。 JsonScript允许你在C++代码中与浏览器内的JavaScript环境进行通信,这对于处理数据交换、动态加载内容等场景非常有用。
首先,你需要包含所需的头文件:
```cpp
#include <QQmlEngine>
#include <QWebChannel>
#include <QWebChannelTransport>
#include <QWebEngineView>
#include <QWebEngineScript>
```
然后,在创建QWebEngineView之前,设置一个QWebChannel,并添加一个通道工厂:
```cpp
QWebChannel* channel = new QWebChannel(this);
channel->registerObject(QStringLiteral("json"), new YourObject); // YourObject是一个实现了JSON接口的对象
QWebEngineView::setWebChannel(channel);
```
接下来,注册JavaScript对象到浏览器端:
```cpp
QWebEngineScript globalScript;
globalScript.setWorldId(QWebEngineScript::WorldDocument);
globalScript.setSourceCode(QStringLiteral("''
const qtWebChannel = new QQmlEngine().engineObject('qt.webchannel');
'''));
webEngineView.page()->mainFrame()->addToGlobalObjects(globalScript);
```
现在你可以通过`YourObject`这个名称从JavaScript访问C++对象了。例如,如果你想发送一个JSON数据到C++:
```javascript
var json = {key: 'value'};
qtWebChannel.send('yourMethod', JSON.stringify(json));
```
在C++端接收到消息并解析JSON:
```cpp
QObject::connect(channel, &QWebChannel::messageReceived,
this, [this](const QString& id, const QByteArray& data) {
QJsonDocument doc = QJsonDocument::fromJson(data);
// 现在可以处理doc对象
});
```