gpt4 book ai didi

javascript - 从 JavaScript 调用 Qt 槽

转载 作者:行者123 更新时间:2023-11-30 14:45:33 25 4
gpt4 key购买 nike

我正在使用 QWebEnginePage 类来呈现我的网页。我需要实现回调函数。所以首先我想在 JS 中注册我的插槽,并在需要时从 JS 调用这个插槽(例如,在网页上单击按钮之后)。我试着做 there ,但这不是我需要的,因为它只说明从 Qt 调用 JS 函数并接收结果,但我需要回调。是否可以实现?

在早期版本的 Qt 中有一个模块 qtwebkit,我的目标可以像描述的那样实现 there使用 addToJavaScriptWindowObject 方法。但是如何使用没有这种甚至类似方法的 qtwebenginewidgets 模块来做到这一点呢?

最佳答案

QWebEngine你可以使用 QWebChannel为了与您的 JS 通信

创建一个代理对象从 JS 与 Qt 通信

// This Object will be registered in the web channel
class MyJSObj : public QObject
{
Q_OBJECT
public:
MyJSObj(QObject * poParent = Q_NULLPTR);

Q_INVOKABLE int foo(); // call from JS
};

在你的cpp代码中

// Create proxy object
m_poMyJSObj = new MyJSObj(this);

// Create channel
m_poWebView = new QWebEngineView(this);
QWebChannel * poChannel = new QWebChannel();
m_poWebView->page()->setWebChannel(poChannel);

// Register your proxy object
const QString oJSObjectName = "mJSQtObject"; // use in JS to call Qt functions
poChannel->registerObject(oJSObjectName, m_poMyJSObj);

在 JS 中

new QWebChannel(qt.webChannelTransport, function (channel) {
// now you retrieve your object
var JSQtObject = channel.objects.mJSQtObject;
// call Qt function from JS
var qtValue = JSQtObject.foo();
});

请注意,您必须包含 qwebchannel.js在 HTML 端

关于javascript - 从 JavaScript 调用 Qt 槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48982793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com