ZBLOG

QWebEngineView 与js通信

在Qt中,可以通过QWebChannel来实现QWebEngineView与JavaScript之间的通信。下面是一个简单的示例:

首先,在C++代码中,创建一个QObject派生类用于与JavaScript进行交互:

// MyObject.h
#pragma once

#include <QObject>

class MyObject : public QObject
{
    Q_OBJECT

public:
    explicit MyObject(QObject *parent = nullptr);

public slots:
    void showMessage(const QString &message);
};
// MyObject.cpp
#include "MyObject.h"
#include <QDebug>

MyObject::MyObject(QObject *parent) : QObject(parent)
{
}

void MyObject::showMessage(const QString &message)
{
    qDebug() << "Received message from JavaScript:" << message;
}

然后,在主程序中创建QWebEngineView对象,并注册我们的MyObject到QWebChannel上:

#include <QApplication>
#include <QWebEngineView>
#include <QWebChannel>
#include "MyObject.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建一个窗口和 QWebEngineView 对象
    QWidget window;
    window.resize(800, 600);
    QWebEngineView webView(&window);

    // 注册自定义对象到 QWebChannel 上
    QWebChannel webChannel;
    MyObject myObj; // 实例化自定义对象
    webChannel.registerObject(QStringLiteral("myObj"), &myObj);

    // 将 QWebEngineView 关联到 QWebChannel 上
    webView.page()->setWebChannel(&webChannel);

    // 加载包含 JavaScript 代码的 HTML 文件或直接使用 setHtml() 函数设置内容

   return app.exec();
}

在JavaScript代码中,可以通过QWebChannel对象来访问C++对象:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JavaScript and Qt Communication</title>
    <script src="qrc:///qtwebchannel/qwebchannel.js"></script>
    <script>
        var myObj;
        new QWebChannel(qt.webChannelTransport, function (channel) {
            myObj = channel.objects.myObj;
        });

        function sendMessage() {
            if (myObj)
                myObj.showMessage("Hello from JavaScript!");
        }
    </script>
</head>
<body>
    <button onclick="sendMessage()">Send Message to C++</button>
</body>
</html>

这样,当点击按钮时,JavaScript会调用C++的showMessage()槽函数,并将消息传递给它。你可以根据需要定义更多的信号和槽函数以实现更复杂的交互。

请确保已正确添加相关模块依赖(例如QT += webengine webchannel)并配置好项目文件。

希望以上示例能帮助你了解如何在Qt中实现QWebEngineView与JavaScript之间的通信。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12727

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?