javascript - 从 JavaScript 调用 Qt 槽

标签 javascript qt callback qwebenginepage

我正在使用 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/

相关文章:

javascript - css 响应式设计难以使用 javascript 访问宽度

javascript - 将四个单独的值保存到四个隐藏字段

qt - 我可以有一个没有主窗口的 Qt 项目吗?

html - 如何以编程方式在 QWebView 中滚动 HTML 元素?

c - 在 C 中实现异步函数

jquery - 如何将对象上下文传递给 jQuery.ajax JSONP 回调?

javascript - 为什么 Node js + React 中请求正文为空?

Javascript:如何提取样式中动态变化的数字的值?

c++ - Mac - 使用 Qt 检测网络断开连接

JavaScript 函数回调和事件