最近Boss要求将如今osgGIS效果嵌入到网页实现,折腾了一周多,终于搞定。
先说下本身的环境:系统为Window10,osg版本为3.4,qt版本为5.9,vs2017编译工程为64位。html
以前看了网上好多好多博文,总体过程大同小异,但那些文章都有一个共同特色,年代较久远,大部分开发的仍是32位的软件,利用vs+qt嵌入网页应该没有什么问题。但如今本身开发的所有是64位程序,相较前辈们的技术路线,也有很大不一样。windows
固然,整体思路仍然是:OSG嵌入QT,QT嵌入网页,这样便实现OSG与网页(IE内核)的结合。浏览器
利用VS+QT构建Activex工程没必要详述,先上一张贴图:安全
一直选择默认,就能构建出一个总体的ActiveQT框架。
注意这里的:框架
的第一行ID号,就在 html文档中的[Objet]对象的值。spa
osg与QT的结合能够查看OSG官方给出的例子 osgviewerQT。
(代码已经上传GitHub)插件
作出来64位ActiveQT控件以后,直接用ie打开多半不会加载成功。打开ie浏览器默认的是直接打开32位的(可经过window的资源管理器,找到iexplore--打开文件位置确认),即便选择64位通常状况下也不会成功,这也是本身卡克的地方。线程
引自网上一段话 "IE 浏览器在同时打开多个选项卡后,Windows 会同时运行多个不一样的 IEXPLORE.EXE 进程,这个现象并不是是不正常的故障,而是 IE 浏览器在 IE 8 及后续的版本中引入的“松散耦合进程框架(Loosely Coupled IE)”进程管理技术。此技术容许 IE 浏览器将主窗口与选项卡用不一样的、分离的 IEXPLORE.EXE 进程隔开。若是一个选项卡遇到了问题须要关闭,能够避免连带影响整个 IE 浏览器主窗口及其它选项卡。这样有助于提高 IE 浏览器的稳定性与安全性。"3d
也就是说,当作出html后,即便选择用64的ie打开,也会至少启动两个线程,查看方式:打开一个ie网页,选择 “任务管理器”选择 “ie转到详细信息”,如图:(通常状况下会看到两个进程,一个是打开的64位,另外一个是默认打开的32的ie进程)server
如今,咱们要作的就是设置IE单进程64位启动启动,方法有二:
运行gpedit.msc组策略管理器。在“计算机配置—》管理模板—》windows组件—》Internet Explore”中打开“选项卡进程增加”,设置为已启用,选项卡进程增加为0。应用以后IE就进入单进程模式。这时候使用C:Program FilesInternet Explore目录下的iexplore.exe(该目录下IE为64-bit),去打开调用64位控件的html文件,就能成功的调用64位控件了。
若是上述方法失败,则可(百度经验)https://jingyan.baidu.com/art...
最后效果: