簡體   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