用Qt开发Web和本地混合的应用
QtWebkit 模块使得Qt widget能够通过HTML的object标签嵌入到web页面中,并通过JavaScript代码进行访问,而Qt对象也能相应的访问web页面元素。
将Qt对象插入到web页面中
首先继承并实现QWebPluginFactory类 :
- class MyPlugin: public QWebPluginFactory
- {
- Q_OBJECT
- public:
- MyPlugin(QObject* parent = 0);
- // 当QtWebkit模块解析到HTML中的object标签时被调用
- virtual QObject* create(const QString& mimeType,
- const QUrl& url,
- const QStringList& argumentNames,
- const QStringList& argumentValues) const;
- // 返回该factory支持的plugin
- virtual QList<Plugin> plugins() const;
- };
- MyPlugin::MyPlugin(QObject* parent)
- : QWebPluginFactory(parent)
- {
- // do nothing
- }
- QObject* MyPlugin::create(const QString& mimeType,
- const QUrl& url,
- const QStringList& argumentNames,
- const QStringList& argumentValues) const
- {
- QLabel* label = new QLabel(url.toString());
- return label;
- }
- QList MyPlugin::plugins() const
- {
- QList list;
- QWebPluginFactory::Plugin entry;
- entry.name = "plugin名";
- entry.description = "描述";
- list.push_back(entry);
- return list;
- }
然后将其嵌入到HTML页面 中:
- <html>
- <head><title>test</title></head>
- <body>
- <object type="application/zxz-plugin" data="http://blog.csdn.net/zhu_xz" width="200" height="100" id="myLabel"></object>
- </body>
- </html>
最后,在Qt代码中加载并显示 该页面:
- QWebView view;
- view.settings()->setAttribute(QWebSettings::PluginsEnabled, true);
- view.page()->setPluginFactory(new MyPlugin);
- view.load(QUrl("test.html"));
- view.show();
这里,当QtWebkit模块解析该HTML文件,遇到object标签时,会自动调用QWebPluginFactory::create()函数,并传递以下参数:
mimeType:application/zxz-plugin
url:http://blog.csdn.net/zhu_xz
此外,还可以通过object标签的param子标签传递参数。
在web页面中访问Qt对象
在web页面中可以通过类似于下的JavaScript代码访问Qt对象:
- <a href="javascript:document.getElementById("myLabel").setText("通过JavaScript访问Qt对象");" mce_href="javascript:document.getElementById("myLabel").setText("通过JavaScript访问Qt对象");">点击访问Qt对象</a>
在Qt对象中访问web页面元素 
在QWebPluginFactory::create()函数中添加以下代码:
- // myPlugin指向的对象可在HTML中用名字myPluginObject进行访问
- webView->page()->mainFrame()->addToJavaScriptWindowObject("myPluginObject", myPlugin);
- // 当信号signalEmitted被触发时,调用JavaScript的functionToCall函数
- webView->page()->mainFrame()->evaluateJavaScript("myPluginObject.signalEmitted.connect(functionToCall);");
用Qt开发Web和本地混合的应用的更多相关文章
- Qt 开发WEB Services客户端代码(使用gSoap)
		1. 首先下载gSoap开发包 http://sourceforge.net/projects/gsoap2 目录包含 wsdl2h.exe( 由wsdl生成接口头文件C/C++格式的头文件 ) ... 
- 原生应用native、Web应用、混合应用hybrid:3者的优缺点解析
		最近原生应用.Web应用.混合应用的名字让我们听得比较熟悉了,现在我们就通过评析各种应用的优缺点来更进一步看看这三者的区别. 一. 原生应用: 你使用过微软PowerPoint 或者 Word吧?这些 ... 
- android 原生应用、Web应用、混合应用优缺点分析
		近期开发几个项目,牵涉到android的几种开发模式.对于原生态开发.web 应用开发以及混合模式开发,本人觉得并非哪一种就是最好的,哪一种就是最差的,这个全然是依据项目的实际需求,选择一种合适的开发 ... 
- Node.js学习笔记——Node.js开发Web后台服务
		一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ... 
- 用“MEAN”技术栈开发web应用(三)用mongodb搭建数据库
		上一篇介绍了如何用express搭建起服务端MVC的开发架构,本篇我们来详细介绍一下这个Model层,也就是数据库访问层.包含如何使用mongodb搭建数据库,以及如何使用mongoose来访问数据. ... 
- 亲手使用Sencha Touch + phonepag开发Web APP随笔 -- 第一个APP
		参考博文: [Phonegap+Sencha Touch] 移动开发1.准备工作 [Phonegap+Sencha Touch] 移动开发2.PhoneGap/Cordova初步使用 经过差不多1 ... 
- [转]World Wind Java开发之四——搭建本地WMS服务器
		在提供地理信息系统客户端时,NASA还为用户提供了开源的WMS Server 服务器应用:World Wind WMS Server.利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持 ... 
- html5文章 -- 使用 jQuery Mobile 与 HTML5 开发 Web App ——开发原则 | Kayo's Melody
		最近专注研究 jQuery Mobile —— 一款很方便就可以把 Web App 包装成适合 Android 与 iPhone 等触屏移动设备的 Javascript 库,结合 jQuery Mob ... 
- [转]使用 jQuery Mobile 与 HTML5 开发 Web App —— jQuery Mobile 事件详解
		在前文<使用 jQuery Mobile 与 HTML5 开发 Web App —— jQuery Mobile 默认配置与事件基础>中,Kayo 对 jQuery Mobile 事件的基 ... 
随机推荐
- 每天4个linux命令--步骤一
			1 :Linux的诞生 Linux由芬兰赫尔辛基大学的Linus Torvalds创建 1991年10月,Linux第一个公开版 0.02版发布 1994年3月,Linux 1.0版发布 Linus ... 
- Revit 2015 API 的全部变化和新功能
			这里从SDK的文章中摘录出全部的API变化.主要是希望用户用搜索引擎时能找到相关信息: Major changes and renovations to the Revit API APIchange ... 
- windows azure 实例
			public class Album : TableServiceEntity { } public class PhotoAlbumDataContext : TableServiceContext ... 
- JAVA学习笔记 -- 数据结构
			一.数据结构的接口 在Java中全部类的鼻祖是Object类,可是全部有关数据结构处理的鼻祖就是Collection和Iterator接口,也就是集合与遍历. 1.Collection接口 Colle ... 
- crm查询记录共享给了哪些人
			有时候,我们须要查询一个记录.共享给了哪些人?怎么做? 第一种做法:是sql的方式 select * from PrincipalObjectAccess where objectid = '5226 ... 
- HDU ACM 1098 Ignatius's puzzle
			分析:裴蜀定理,a,b互质的充要条件是存在整数x,y使ax+by=1.存在整数x,y,使得ax+by=c.那么c就是a,b的公约数. 如果存在数a ,由于对随意x方程都成立.则有当x=1时f(x)=1 ... 
- Swift - 短信发送功能的实现
			使用MessageUI.framework框架可以实现短信发送功能,步骤如下: (1)首先判断设备是否有发送短信功能 (2)如果设备允许发送短信,创建一个MFMessageComposeViewCon ... 
- EasyUI - Tree 树组件
			效果: 数据库设计: 使用的数据: 其中的字段,是跟据要生成的树节点的属性定义的. text:代表要显示的字段名称. state:是否是目录节点. iconCls:节点的图标是什么. url:跳转的链 ... 
- 关于Delphi中TRttiContext.FindType失效的问题
			自从Delphi2010后,Delphi中的Rtti功能得到了增强.我们终于可以不用先RegisterClass,再GetClass获取类的信息了.而只是简单的通过TRttiContext.GetTy ... 
- C#日志工具汇总
			log4net log4net是一个可以帮助程序员把日志信息输出到各种不同目标的.net类库.它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输出,提供了比.net自 ... 
