QT Webkit与JS通信

来源:互联网 发布:maven配置阿里云仓库 编辑:程序博客网 时间:2024/06/16 16:59

QT环境下开发带内嵌页面的客户端程序都是通过QWebVeiw来显示网页。

QWebView *view = newQWebView(parent);

     view->load(QUrl("http://qt.nokia.com/"));

     view->show();

但是,以上简单的代码仅仅只是页面显示,因为默认情况下,出于安全的考虑,是没有任何c++对象插入到web中的。为了让web能够访问本地对象,C++应用程序必须通过以下的方式允许web访问,代码如下:

QWebFrame *frame =myWebPage->mainFrame();

frame->addToJavaScriptWindowObject("someNameForMyObject",myObject);

 QWebFrame::addToJavaScriptWindowObject() ,将一个本地对象插入到web环境中。至此,JS就可以通过链接本地对象的信号的方式与C++通信了;

Ø JS全局函数连接到本地对象的信号

functionmyInterestingScriptFunction() { ... }

 ...

myQObject.somethingChanged.connect(myInterestingScriptFunction);

Ø JS成员函数连接到本地对象的信号

var obj = { x: 123 };

 var fun = function() { print(this.x); };

 myQObject.somethingChanged.connect(obj, fun);

C++需要调用JS时,只需要简单的发送信号即可:

myQObject.somethingChanged("hello");

 

JS可以通过调用本地C++对象的方法,与C++通信。本地C++对象须满足以下要求:

1、  本地对象须从QObject派生

2、  必须打开QT源对象宏

3、  JS调用的方法必须是 Q_INVOKABLE

EG:

class myQObject : public QObject

{

    Q_OBJECT

 public:

     Q_INVOKABLE voidthisMethodIsInvokableInQtScript();

     void thisMethodIsNotInvokableInQtScript();

     ...

};

JS也可以通过访问C++对象属性与c++通信。

如果c++本地对象的属性如下定义:

Q_PROPERTY(bool enabled READenabled WRITE setEnabled)

那么JS访问其属性的代码如下:

myQObject.enabled = true;

...

myQObject.enabled = !myQObject.enabled;

原创粉丝点击