JS与Qt对象交互

来源:互联网 发布:php构造函数和析构函数 编辑:程序博客网 时间:2024/06/05 05:22

实现js与Qt程序的交互

 (2011-05-20 16:07:24)
转载
void QWebFrame::addToJavaScriptWindowObject ( const QString &name,QObject *object )

我们要在js调用该QObject之前调用这个函数。 这个时机不好掌握, 不过我们可以按文档的建议, 把这个函数放在一个signal的槽里调用。 代码如下:

/// in constructor ///
connect(ui.webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(populateJavaScriptWindowObject()));
///slot////
void FormExtractor::populateJavaScriptWindowObject()
{
ui.webView->page()->mainFrame()->addToJavaScriptWindowObject(“formExtractor”, this);
}

addToJavaScriptWindowObject的第一个参数是对象在javascript里的名字, 可以自由命名, 第二个参数是对应的QObject实例指针。

这样在javascript里就可以直接访问formExtractor对象拉, 就像在Qt里访问这个formExtractor一样, 是不是看上去超级简单? 当然事情不会总是怎么简单的。

如果我们翻开Qt文档关于addToJavaScriptWindowObject的说明就会发现, 还有一点非常重要的内容在文档中仅仅是一笔带过, 不注意看很可能就错过了重要的信息:

Make object available under name from within the frame's JavaScript context. The object will be inserted as a child of the frame's window object.

Qt properties will be exposed as JavaScript properties and slots as JavaScript methods.

有没有意识到上面显示的这句话意味着什么呢? 大概聪明的同学们都已经意识到了吧。

要想在js里调用Qt的方法, 还有一个重要的条件需要满足, 那就是把这个方法声明为槽函数(而且是public槽), 普通的函数是不行的!

要想在js里直接访问到QObject的成员, 该成员必须定义为属性才行!?? 而这个QObject不一定非得是QWidget, 可以是任何QObject及其派生类的实例。

满足了上面的条件我们就可以在js里调用formExtractor的函数啦:

<form onsubmit=”formExtractor.submit()”>

这里和调用任何js的变量和函数都是一致的, 具体看看js的语法就行了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 五年级考几分怎么办 思想晚熟的人怎么办 孩子学不好数学怎么办 做作业速度慢怎么办 孩子碎头发太多怎么办 孩子碎发太多怎么办 孩子的作业太多怎么办 爸爸是乙肝孩子怎么办 孩子出生没有奶怎么办 顺产后没有奶水怎么办 还在经常逃课怎么办 老板不重视自己怎么办 孩子不听话爱撒谎怎么办 老师针对我孩子怎么办 小孩动不动就哭怎么办 孩子太拧应该怎么办 孩子贪玩不爱学习怎么办 高二了还不学怎么办 小朋友不喜欢上幼儿园怎么办 一岁半的宝宝不听话怎么办 老公是个窝囊废怎么办 幼儿园老师不喜欢家长怎么办 老师讨厌学生了怎么办 一个舍友很讨厌怎么办 家长对老师不满怎么办 教师被家长辱骂怎么办 如果老师喜欢自己怎么办 孩子不思进取逃避学习怎么办 老师拿孩子泄愤怎么办 老师对小孩不好怎么办 孩子被老师骂怎么办 孩子幼儿园被打怎么办 两个家长吵架老师怎么办 家长和老师矛盾怎么办 孩子特别害怕老师怎么办? 老师排挤孤立孩子怎么办 很害怕一件事怎么办 高中老师误会我怎么办 家长讹老师老师怎么办 小孩子老说头疼怎么办 孩子总是否定自己怎么办