qt webkit库,qt开发web
页面缓存刷新可以做什么(四)——实现本地某个东西和Java脚本语言交互 中文-英特尔软件网络
页面缓存刷新可以做什么(四)——实现本地某个东西和Java脚本语言交互作者:程大位程大伟(英特尔)(38篇文章)
日期:六月9, 2010 在12:21 下午上一篇我们了解了如何在内核中创建含有网内容的本地应用。这一篇我们将实现Java脚本语言和本地的某个东西的交互。在阅读本篇之前需要对夸脱的信号和槽机制和Java脚本语言有简单的了解。
夸脱本地对象和Java脚本语言交互分为三个步骤
将本地某个东西暴露给内核和Java脚本语言将本地某个东西的信号和Java脚本语言的槽连接起来通过Java脚本语言调用本地某个东西的槽
也就是第一步和第2步结合起来实现本地某个东西的信号和Java脚本语言的槽连接
第一步和第3步结合起来实现通过Java脚本语言调用本地某个东西的槽
下面我们就分别看一下第1、2、3步分别如何实现的。
1、将本地某个东西暴露给网络工具包。主要分为以下几个步骤。
新建一个QObject,命名为simpleQObject,包含信号和槽。其头文件如下:#包含Qt core/Q object #包含Qt core/QMap #包含Qt core/QString #包含Qt core/Q variant类sampleq对象:public Q对象{ Q _ object public:sampleq对象(Q对象* parent=0);信号:/*声明q对象信号*/void信号(QMap QString,QVariant对象);公共插槽:/*声明QObject slots */QMap QString,返回的q variant slot(const QMap QString,q variant object);//QObject的槽,用来返回字符串void slotThatEmitsSignal();//QObject的槽,用来发射信号,并且记录发射次数private:int m _ signal发出;QMap QString,q variant m _ returnObjectQMap QString,q variant m _ emit signal };创建实现函数主窗口. h和主窗口. cpp。主窗口。h代码如下# include qmain窗口# include 示例qobject。h "类主窗口:public Q main window { Q _ object public:main window(Q widget * parent=0);~主窗口();专用插槽:/*声明将某个东西暴露给页面缓存刷新的函数*/void add JavaScript object();protected:void change事件(QEvent * e);private:Ui:主窗口* Uisample qobject * m _ sample qobject };主窗口。卡片打印处理机(Card Print Processor的缩写)关键代码如下: //当网页被载入或者刷新时,将暴露给内核的某个东西和webkit JavaScript连接connect(ui-webView-page()-mainFrame(),SIGNAL(JavaScript windowobjectcleared()),this,SLOT(add JavaScript object());void主窗口:add JavaScript object(){//添加JavaScript对象函数的实现:将simpleQObject和webkit JavaScript连接this-ui-webView-page()-mainFrame()-addToJavaScriptWindowObject( sampleQObject ,this-m _ sampleQObject);} 2.将本地某个东西的信号和Java脚本语言的槽连接起来
如何发射某个东西信号信号:空信号(QMap QString,QVariant对象);public slots:void slotthamitsignal();/*此插槽用于发出信号并计算发出次数*/void示例q object:slotThatEmitsSignal(){ qDebug()示例q object:slotThatEmitsSignal ;这-m _信号发射;/*计数发出次数*/this-m _ emit信号。clear();this-m _ emit信号[ signal semited ]=q变量(this-m _ signal emitted);this-m _ emit signal[ sender ]=q variant( sample q object:slotThatEmitsSignal );qDebug() sampleq object:slotthamitssignal this-m _ emit信号;/* 发射信号*/发射信号(this-m _ emit信号);} JavaScript槽的实现$(文档)。ready(function() {try {/*将样本对象的信号和Java Script语言插槽连接起来*/sampleq对象。信号。连接(插槽);/* 当simpleQObject发射信号时调用Java脚本语言的槽*/sampleq对象。slotthatemitssignal();} catch(e){ alert(e);}});/*插槽函数将会输出SimpleQObject发出了信号?times */函数slot(object){ var object string=object。发件人已发出对象。“信号”次信号;alert(对象字符串);}运行应用程序。
当点击刷新时,弹出新的对话框:
3.通过Java脚本语言调用本地某个东西的槽
Java脚本语言信号发射请尝试{ var object={ int value:1 };/* 声明一个Java Script语言对象并用simpleQObject的槽的返回值赋值它*/var返回的对象=sampleqobject。slotthattreturns(对象);/* 输出一增加了奖金*/alert(返回的对象。字符串值);} QObject槽函数QMap QString,q variant sampleq object:slotthatrells(const QMap QString,q variant object){ qDebug() sampleq object:slotthatrells ;this-m _ return对象。clear();this-m _ return对象。unite(对象);QString added bonus=QString:number(object[ int value ].toInt(),10).追加(附加奖金);this-m _ return object[字符串值]=q variant(附加奖金);qDebug() sampleq object:slot,它返回 this-m _ return对象;返回this-m _ return对象;//返回m _返回对象包含有字符串一额外奖励}运行应用程序
本例子代码下载地址:http://http://software.intel.com/file/28112
注:本例子中部分代码来自wiki.forum.nokia.com
http://维基。论坛。诺基亚。com/index。PHP/exposure _ q objects _ to _ Qt _ Webkit
下一篇我们将探索一下如何将S60下的网运行时小部件移植至夸脱的内核上来,如今的慧锐通部件只能依赖于S60的os,如果港口只夸脱的网络工具包,那么将可以实现广泛开发者梦寐已久的跨平台功能。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。