1. 程式人生 > >QT 5.7 QWebChannel如何呼叫JavaScript以及JavaScript如何呼叫QT中函式

QT 5.7 QWebChannel如何呼叫JavaScript以及JavaScript如何呼叫QT中函式

文章用來回憶內容,不喜勿噴。

QWebChanne與js互動

下面是用來與JS互動類

webconnect.h

#ifndefWEBCONNECT_H
#defineWEBCONNECT_H
#include<QDebug>
#include<QObject>
classwebconnect:publicQObject
{
Q_OBJECT                             
public:
publicslots:
voidreceiveText(constQString&r_text);
signals:
voidsendText(const
QString&text);
};
#endif//WEBCONNECT_H

標頭檔案裡面我認為最重要也是最容易忽視的就是  

:publicQObject  和  Q_OBJECT   
類裡如果少了這兩樣就會呼叫失敗,這折騰了我幾天的時間.....
webconnect.cpp
#include"webconnect.h"
voidwebconnect::receiveText(constQString&r_text)
{
qDebug()<<(QObject::tr("Receivedmessage:%1").arg(r_text));
}
下面是怎樣從QT傳類物件到JS
QWebEnginePage
*page=newQWebEnginePage(this);
ui->webEngineView->setPage(page);
QWebChannel*channel=newQWebChannel(this);
channel->registerObject(QStringLiteral("content"),&lianjie);                              //lianjie就是互動類
page->setWebChannel(channel);
ui->webEngineView->setUrl(QUrl("xxxxxx"));

signals就是發出訊號的意思
在JS檔案裡面我是這樣寫的
  window.onload = function() {          
            new QWebChannel(qt.webChannelTransport, function(channel) {
                // make dialog object accessible globally
             var    content = channel.objects.content;                    //把物件賦值到JS中
              content.receiveText("sss");                                     //c++中呼叫類中的函式一樣

    }
content.sendText.connect(function(message) {                         //連線QT中發出的訊號,裡面的message是引數;只需要在QT中呼叫此函式也就是sendText就可以呼叫JS函式
                    alert("Received message: " + message);              
                });
            });
            }
如果出現什麼js找不到什麼函式,那就是你寫的連線類有問題。
2016年10月23日01:13:37                                   
 好了該睡覺了(~﹃~)~zZ !!!