在QtWebkit的javascript里访问QObject的最关键的关键就是下面这个方法:

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的语法就行了。

http://blog.sina.com.cn/s/blog_671732440100utzp.html

让QtWebKit使用缓存

QNetworkDiskCache *diskCache=newQNetworkDiskCache(this);

QString location=QDesktopServices::storageLocation(QDesktopServices::CacheLocation);

diskCache->setCacheDirectory(location);

this->ui->wndHtmlView->page()->networkAccessManager()->setCache(diskCache);

QDesktopServices::storageLocation(QDesktopServices::CacheLocation);返回的是系统的缓存目录的路径

http://blog.sina.com.cn/s/blog_671732440100utyl.html

实现js与Qt程序的交互(使用QtWebkit)的更多相关文章

  1. 转载:js和as间的交互

    转载一: 提及AS3与外部脚本的交互,笔者认为可以总结成两种.一是AS3调用外部函数,二是外部脚本调用AS3函数.无外乎就 这两种.在调用函数的同时,我们还可以向函数传递一些参数.这就达到了传递数据的 ...

  2. .Net Webapi SignalR与微信小程序的交互

    .Net Webapi SignalR与微信小程序的交互 一.SignalR与Webapi 1.SignalR的安装: Signalr与跨域仅需要安装两个开源库 Microsoft.Owin.Cors ...

  3. Node.js SDK与fabric链码交互开发

    1.本篇背景 前面已经对链码开发作了比较详细的介绍,并且对官方提供的 fabcar 链码进行了解读,本篇将介绍如何使用 Node.js SDK 与区块链网络中的链码进行交互. 本篇内容基本来自官方 H ...

  4. Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...

  5. C#在WinForm中使用WebKit传递js对象实现与网页交互的方法

    这篇文章主要介绍了C#在WinForm中使用WebKit传递js对象实现与网页交互的方法,涉及针对WebBroswer控件及WebKit控件的相关使用技巧,需要的朋友可以参考下 本文实例讲述了C#在W ...

  6. 前后端开发(2):浏览器与PHP程序的交互

    上一节介绍怎么在mac电脑上启用PHP程序,并且演示了一个简单的例子,这个例子运行时,涉及了浏览器.apache以及PHP程序的交互,这三者的关系大概是这样的: 一般来说,浏览器(或者类似功能的程序) ...

  7. 【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式

    上文<嵌入式Qt开发-移植到ARM开发板 >介绍了Qt程序的移植,本文再说下如何使开发板Qt程序使用触摸屏或USB方式进行交互. 之前刚把一个qt程序移植到arm板上成功运行显示时就开心的 ...

  8. 部署Qt程序时plugins相关问题

    部署qt程序时,经常涉及到Qt5.5.0\5.5\msvc2013\plugins目录下的一些动态链接库 例如数据库sqldrivers,操作系统类型platforms,读取各种图片imageform ...

  9. linux下QT程序输出乱码解决方法

    参考文章:http://blog.csdn.net/jiang1013nan/article/details/6667871 http://my.oschina.net/zjlaobusi/blog/ ...

随机推荐

  1. Opencv均值漂移pyrMeanShiftFiltering彩色图像分割流程剖析

    meanShfit均值漂移算法是一种通用的聚类算法,它的基本原理是:对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为 ...

  2. hive 3.1.0 安装配置

    环境: hadoop 3.1.1 hive 3.1.0 mysql 8.0.11 安装前准备: 准备好mysql-connector-java-8.0.12.jar驱动包 上传hive的tar包并解压 ...

  3. Mac的GUI哲学

    GUI 哲学 前些日子,看了 Tinyfool 老师的一篇文章<开发人员为何应该使用 Mac OS X 兼 OS X 小史>,才恍然 Mac 系统可不仅仅是 UI 上与 Windows 大 ...

  4. HBase 查找版本

    直接使用hbase shell命令进入shell时间会告诉版本: 进shell后.关键在version命令.能够查看版本: # hbase shell HBase Shell; enter 'help ...

  5. 回归(regression)的理解(regressor,回归子)

    1. 基本概念 回归(regression)是监督学习(given {(xi,yi)})的一个重要分类.回归用于预测输入变量(自变量,Xi)与输出变量(因变量,Yi) 之间的关系,特定是当输入变量的值 ...

  6. wpf控件开发基础(4) -属性系统(3)

    原文:wpf控件开发基础(4) -属性系统(3) 知识回顾 接上篇,上篇我们真正接触到了依赖属性的用法,以及依赖属性的属性元数据的用法,并且也实实在在地解决了之前第二篇提到的一系列问题.来回顾一下 属 ...

  7. APP和服务端-架构设计(二)

    1. App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 1.1 安全机制的设计 现在,大部分App的接口 ...

  8. Scala & IntelliJ IDEA环境搭建升级版:在JAVA中调用Scala的helloworld

    --------------------- 前言 --------------------- 项目关系,希望用Spark GraphX做数据分析及图像展示,但前提是得会spark:spark是基于sc ...

  9. vcmi(魔法门英雄无敌3 - 开源复刻版) 源码编译

    vcmi源码编译 windows+cmake+mingw ##1 准备 HoMM3 gog.com CMake 官网 vcmi 源码 下载 QT5 with mingw 官网 Boost 源码1.55 ...

  10. OpenGL+VS2012编译环境配置

    OpenGL库主体分为三部分,分别是 gl(OpenGL核心库) glu(Utility Library,OpenGL实用库) glut(Utility Toolkit,OpenGL实用工具库) gl ...