QT 5.7 QWebChannel如何呼叫JavaScript以及JavaScript如何呼叫QT中函式
阿新 • • 發佈:2019-01-27
文章用來回憶內容,不喜勿噴。
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(constQString&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 !!!