繁体   English   中英

从JavaScript调用Qt插槽

[英]Calling Qt slot from JavaScript

我正在使用QWebEnginePage类渲染网页。 而且我需要实现回调函数。 因此,首先我想在JS中注册我的广告位,并在需要时(例如,在网页上单击按钮后)从JS调用此广告位。 我试着去那里 ,但是我不需要,因为它只说明了从Qt调用JS函数并接收结果,但是我需要回调。 有可能实现吗?

在Qt的早期版本有一个模块QtWebKit的,我的目标可能像discribed实现使用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();
        });

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM