QT 5.7 QWebChannel如何调用JavaScript以及JavaScript如何调用QT中函数

文章用来回忆内容,不喜勿喷。

QWebChanne与js交互

下面是用来与JS交互类

webconnect.h

#ifndef WEBCONNECT_H
#define WEBCONNECT_H
#include 
#include 
 
  
class webconnect : public QObject
{
    Q_OBJECT                             
public:
public slots:
void receiveText(const QString &r_text);
signals:
    void sendText(const QString &text);
};
 
  
#endif // WEBCONNECT_H
 
  

头文件里面我认为最重要也是最容易忽视的就是  

 
  
 : public QObject  和  Q_OBJECT   
类里如果少了这两样就会调用失败,这折腾了我几天的时间.....
webconnect.cpp

#include "webconnect.h"
 
  
 
  
 
  
void webconnect::receiveText(const QString &r_text)
{
    qDebug()<<(QObject::tr("Received message: %1").arg(r_text));
}
下面是怎样从QT传类对象到JS 
  

 
  
    QWebEnginePage *page = new QWebEnginePage(this);
    ui->webEngineView->setPage(page);
    QWebChannel *channel = new QWebChannel(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 !!!

你可能感兴趣的:(QT)