写在前面

最近Boss要求将现在osgGIS效果嵌入到网页实现,折腾了一周多,终于搞定。
先说下自己的环境:系统为Window10,osg版本为3.4,qt版本为5.9,vs2017编译工程为64位。

之前看了网上好多好多博文,整体过程大同小异,但那些文章都有一个共同特点,年代较久远,大部分开发的还是32位的软件,利用vs+qt嵌入网页应该没有什么问题。但现在自己开发的全部是64位程序,相较前辈们的技术路线,也有很大不同。

当然,总体思路仍然是:OSG嵌入QT,QT嵌入网页,这样便实现OSG与网页(IE内核)的结合

ActiveQT server插件

利用VS+QT构建Activex工程不必详述,先上一张贴图:图片描述

一直选择默认,就能构建出一个整体的ActiveQT框架。
注意这里的:图片描述

的第一行ID号,就在 html文档中的[Objet]对象的值。

osg嵌入QT

osg与QT的结合可以查看OSG官方给出的例子 osgviewerQT
(代码已经上传GitHub)

难缠的IE(关键)

做出来64位ActiveQT控件之后,直接用ie打开多半不会加载成功。打开ie浏览器默认的是直接打开32位的(可通过window的资源管理器,找到iexplore--打开文件位置确认),即使选择64位一般情况下也不会成功,这也是自己卡克的地方。

引自网上一段话 "IE 浏览器在同时打开多个选项卡后,Windows 会同时运行多个不同的 IEXPLORE.EXE 进程,这个现象并非是不正常的故障,而是 IE 浏览器在 IE 8 及后续的版本中引入的“松散耦合进程框架(Loosely Coupled IE)”进程管理技术。此技术允许 IE 浏览器将主窗口与选项卡用不同的、分离的 IEXPLORE.EXE 进程隔开。如果一个选项卡遇到了问题需要关闭,可以避免连带影响整个 IE 浏览器主窗口及其它选项卡。这样有助于提升 IE 浏览器的稳定性与安全性。"

也就是说,当做出html后,即使选择用64的ie打开,也会至少启动两个线程,查看方式:打开一个ie网页,选择 “任务管理器”选择 “ie转到详细信息”,如图:(一般情况下会看到两个进程,一个是打开的64位,另一个是默认打开的32的ie进程)
图片描述

现在,我们要做的就是设置IE单进程64位启动启动,方法有二:

ie单进程启动方法一:

运行gpedit.msc组策略管理器。在“计算机配置—》管理模板—》windows组件—》Internet Explore”中打开“选项卡进程增长”,设置为已启用,选项卡进程增长为0。应用之后IE就进入单进程模式。这时候使用C:Program FilesInternet Explore目录下的iexplore.exe(该目录下IE为64-bit),去打开调用64位控件的html文件,就能成功的调用64位控件了。

ie单进程启动方法二:

如果上述方法失败,则可(百度经验)https://jingyan.baidu.com/art...

最后效果:
图片描述


SimpleTriangle
128 声望109 粉丝

只会写 Hello World 的厨子